【问题标题】:privileged docker container cannot drop capabilities?特权 docker 容器不能丢弃功能?
【发布时间】:2017-05-28 02:17:27
【问题描述】:

我正在运行这个

docker run --rm --name mydocker --privileged \
    -v /sys:/sys:ro \
    -v /dev:/dev \
    --stop-signal=SIGRTMIN+3 \
    -p 8080:8080 \
    -p 5005:5005 \
    -p 8443:8443 \
    --net=host \
    --cap-drop=SYS_BOOT \
    /usr/sbin/init

它应该作为 init 运行 systemd 并从中删除 SYS_BOOT 功能。这是彻底关闭容器所必需的。当如上运行时,它确实以 pid 1 运行 systemd init,但该功能不会被删除:

[root@FK8CDFA9A82A9E7-A /]# cat /proc/1/status  | grep Cap  
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

当 SYS_BOOT 功能被删除时,它应该如下所示:

CapInh: 0000003fffbfffff
CapPrm: 0000003fffbfffff
CapEff: 0000003fffbfffff
CapBnd: 0000003fffbfffff
CapAmb: 0000000000000000

任何想法为什么这不起作用? Docker 版本:

客户:
版本:1.12.3
API 版本:1.24
Go 版本:go1.6.3
Git 提交:34a2ead
建成:
操作系统/架构:linux/amd64

服务器:
版本:1.12.3
API 版本:1.24
Go 版本:go1.6.3
Git 提交:34a2ead
建成:
操作系统/架构:linux/amd64

【问题讨论】:

    标签: docker systemd linux-capabilities


    【解决方案1】:

    指定 --privileged 时不能删除功能。这似乎是一个弱点。以下是相关代码:Docker CE Linux OCI

    if c.HostConfig.Privileged {
        caplist = caps.GetAllCapabilities()
    } else {
        caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Effective, c.HostConfig.CapAdd, c.HostConfig.CapDrop)
        if err != nil {
            return err
        }
    }
    

    【讨论】:

    • 这似乎是一个弱点。谢谢
    【解决方案2】:

    为什么要在容器中运行 docker-daemon?如果只是为了控制其他服务,那么docker-systemctl-replacement script 将是一个更容易的选择。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2016-11-11
      • 2019-05-17
      • 1970-01-01
      相关资源
      最近更新 更多