或者,也许这可以归结为:我如何获取或创建
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-chrome的README.md指出,在docker下运行chrome有以下几种方法:
--no-sandbox
运行
google-chrome --no-sandbox ...
。我看到了多个警告(例如 1、2),表明我应该信任所访问的网站(我不信任)。显然,我在这里禁用了大部分 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。