【问题标题】:Docker-Compose: order of cap_drop and cap_add?Docker-Compose:cap_drop 和 cap_add 的顺序?
【发布时间】:2020-11-19 13:53:19
【问题描述】:
【问题讨论】:
标签:
docker
docker-compose
linux-capabilities
【解决方案1】:
在摸索moby源代码后,我终于找到TweakCapabilities():需要添加和删除两组能力,执行以下方案;因此在 docker-compose.yaml 中有效,其中 YAML 没有为 cap_add 和 cap_drop 键定义顺序。下面的第一个匹配项将终止列表。
- 容器是
privileged: true:完全忽略cap_add 和cap_drop,而是返回所有可用功能。
-
cap_add 和 cap_drop 都是空:返回默认的 Docker 功能集。
-
cap_add 包含ALL:返回所有功能减去cap_drop 中列出的功能(忽略后者中的ALL)。
-
cap_drop 包含 ALL:仅返回来自 cap_add 的功能,忽略任何 Docker 默认功能。
- 默认:首先从
cap_drop中列出的默认集合中删除所有功能,然后添加cap_add中的功能,最后返回结果。
如果我没记错的话,这也可以用更易于理解的方式表示,如下所示......
privileged: true |
ALL capabilities: ignores cap_add and cap_drop (boss mode) |
|
no cap_add
|
cap_add: ['CAP_A'] |
cap_add: ['ALL'] |
no cap_drop |
default capabilities |
default + CAP_A
|
ALL capabilities |
cap_drop: ['CAP_Z'] |
default -CAP_Z
|
default -CAP_Z +CAP_A
|
ALL -CAP_Z
|
cap_drop: ['ALL'] |
NO capabilities |
CAP_A |
ALL capabilities |
最后,只有以下两个“确定性”组合始终包含cap_drop: ALL,并且遵循最低权限:
|
no cap_add
|
cap_add: ['CAP_A'] |
|
| |
|
|
|
| |
|
|
|
cap_drop: ['ALL'] |
NO capabilities |
CAP_A |
|