【问题标题】:Docker-Compose: order of cap_drop and cap_add?Docker-Compose:cap_drop 和 cap_add 的顺序?
【发布时间】:2020-11-19 13:53:19
【问题描述】:

docker compose file reference 以相当简洁的方式描述了 cap_addcap_drop 元素:

添加或删除容器功能。有关完整列表,请参阅 man 7 功能。

这些元素是否有顺序,即先添加后删除?或者顺序是否重要(YAML 是否完全支持字典?)?

cap_addcap_drop 之一包含ALL 时会发生什么?

我知道 Docker Linux 默认功能集,在 https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L4 中定义。

【问题讨论】:

    标签: docker docker-compose linux-capabilities


    【解决方案1】:

    在摸索moby源代码后,我终于找到TweakCapabilities():需要添加和删除两组能力,执行以下方案;因此在 docker-compose.yaml 中有效,其中 YAML 没有为 cap_addcap_drop 键定义顺序。下面的第一个匹配项将终止列表。

    • 容器是privileged: true:完全忽略cap_addcap_drop,而是返回所有可用功能
    • cap_addcap_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

    【讨论】:

      猜你喜欢
      • 2021-08-19
      • 2019-03-13
      • 2019-01-25
      • 2019-09-28
      • 2018-05-05
      • 2019-12-13
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多