如何在docker中安全地运行chrome?

问题描述 投票:0回答:0

或者,也许这可以归结为:我如何获取或创建

seccomp
的工作
google-chrome
配置文件?

我想创建一个 docker 映像,在其中启动 Google Chrome 并浏览我不信任的网站,并尽可能安全地执行此操作。有多种选择。你能帮我选择其中最安全的吗?

如果我们尝试在 docker 中天真地运行 chrome,我们会收到此错误:

$ google-chrome
Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
[152:152:0804/063753.226725:FATAL:zygote_host_impl_linux.cc(201)] Check failed: . : Operation not permitted (1)
Trace/breakpoint trap (core dumped)

因此我们要么需要禁用沙箱,要么允许它运行。 Zenika/alpine-chromeREADME.md指出,在docker下运行chrome有以下几种方法:

--no-sandbox

运行

google-chrome --no-sandbox ...
。我看到了多个警告(例如 12),表明我应该信任所访问的网站(我不信任)。显然,我在这里禁用了大部分 chrome 安全性,因此我实际上 100% 信任 docker 的安全性。不是很好。甚至有一个完整的网站专门解释为什么
--no-sandbox
是一个坏主意:https://no-sandbox.io/

当我们使用

--no-sandbox
运行 chrome 时,它还会在启动时显示这个不祥的警告:

您正在使用不受支持的命令行标志:--no sandbox。稳定性和安全性将会受到影响。

kasmweb/chrome(以及许多其他)使用这种方法,甚至在

"CommandLineFlagSecurityWarningsEnabled": false
中设置
default_managed_policy.json
以避免产生警告消息。

具有
SYS_ADMIN
能力

运行

docker run --cap-add=SYS_ADMIN ...
(或者更糟,使用
--privileged

这将为 docker 提供正确使用沙箱所需的权限。但我担心我将 root 移交给容器,所以在这里我将 100% 信任浏览器沙箱和整个主机,这不太好。

puppeteer/puppeteer 建议使用这种方法。

“最好的”:与
seccomp

Zenika/alpine-chrome 建议使用 Jessie Frazelle 的

chrome.json
Chrome 的 seccomp 配置文件,并将其称为:

这是运行此 Headless Chrome docker 映像的最安全方法。

使用:

docker run --security-opt seccomp=$(pwd)/chrome.json  ...
启动容器。然而,当我尝试这个时,我收到以下错误,也许是因为我没有无头运行:

$ google-chrome
[90:90:0803/004311.319570:FATAL:spawn_subprocess.cc(221)] posix_spawn: Operation not permitted (1)
Trace/breakpoint trap (core dumped)

我尝试将

spawn
posix_spawn
添加到 Jessie Frazelle 的
chrome.json
(遵循文件中的模式),但无法消除此错误。这种
seccomp
方法真的是最安全的吗?如果是这样,我该如何修改
chrome.json
文件才能使其正常工作?

使用其他浏览器

只需使用 Firefox 即可完成。但我实际上喜欢使用chrome。

docker google-chrome security
© www.soinside.com 2019 - 2024. All rights reserved.