Permissions

Docker 下的 Chrome:CAP_SYS_ADMIN 與特權?

  • June 4, 2019

我在測試環境中的 Docker 中執行 chromedriver + chrome。

在最新的 CoreOS 升級之前,一切正常。

這些是似乎工作的版本:

VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937

這是一個導致 chrome 核心轉儲的較新版本:

VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450

查看更改,似乎 docker 已從 1.11.x 升級到 1.12.x,這破壞了setns()容器內的呼叫。setns()Chrome 使用它來創建命名空間。

這是範例輸出:

jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae

從這個盒子上的一個容器內:

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:

這就是新版本打破它的方式:

jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead

[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
 Network namespace supported,
 but failed: errno = Operation not permitted
Aborted (core dumped)

我發現如果我使用--cap-add=SYS_ADMINor啟動容器--privileged- Chrome 會按預期工作。

這兩個開關有什麼區別?啟用了哪些功能--privileged

而且,我可以setns()在不影響安全性的情況下允許進入容器嗎?

AFAICS,文件建議授予容器所需的功能,而不是使用--privileged交換機。在特權模式下執行似乎授予 容器所有功能(如果文件是最新的,那麼第一個 URL 中列出的正是這些功能)。

簡而言之,與交換機--cap-add=SYS_ADMIN相比,我會說它為容器提供了更小的功能子集。--privileged事件 Docker 文件(第一個 URL)中的範例似乎更喜歡在需要的地方添加SYS_ADMINorNET_ADMIN功能。

引用自:https://serverfault.com/questions/824809