gpt4 book ai didi

docker - 为什么要求在 Kubernetes PodSecurityPolicy 冗余中删除所有功能并具有非 root + 禁止权限提升?

转载 作者:行者123 更新时间:2023-12-02 11:52:21 30 4
gpt4 key购买 nike

PodSecurityPolicy documentation 中的第二个示例策略包含以下 PodSecurityPolicy 片段

...
spec:
privileged: false
# Required to prevent escalations to root.
allowPrivilegeEscalation: false
# This is redundant with non-root + disallow privilege escalation,
# but we can provide it for defense in depth.
requiredDropCapabilities:
- ALL
...

为什么删除非 root 用户的所有功能是多余的 + 禁止权限提升?您可以拥有一个没有权限提升的容器进程,它是非 root 但具有有效功能,对吗?

Docker 似乎无法做到这一点:
$ docker run --cap-add SYS_ADMIN --user 1000 ubuntu grep Cap /proc/self/status
CapInh: 00000000a82425fb
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 00000000a82425fb
CapAmb: 0000000000000000

即使在尝试明确添加它们时,所有有效功能也已被删除。但是其他容器运行时可以实现它,所以这个评论只是 Docker 特定的吗?

最佳答案

Why is dropping all capabilities redundant for non-root + disallow privilege escalation?



由于您需要提升权限才能使用"new"功能,因此 allowPrivilegeEscalation: false 会在 execve 系统调用中禁用 setuid,从而阻止使用任何新功能。
同样如文档中所示:“一旦设置了该位,它就会跨 fork、clone 和 execve 继承并且不能取消设置”。更多信息 here

这与 privileged: false 结合使 requiredDropCapabilities: [ALL] 变得多余。

此处等效的 Docker 选项是:
  • --user=whatever => privileged: false
  • --security-opt=no-new-privileges => allowPrivilegeEscalation: false
  • --cap-drop=all => requiredDropCapabilities: [ALL]

  • It seems like this is not possible with Docker



    这就是 Docker 正在做的事情,当您指定非特权用户时,所有有效功能都将被删除( CapEff: 0000000000000000 ),即使您指定 --cap-add SYS_ADMIN
    这与作为选项的 --security-opt=no-new-privileges 相结合使 --cap-drop=all 变得多余。

    请注意,docker 的默认功能掩码似乎包括 SYS_ADMIN
    $ docker run --rm ubuntu grep Cap /proc/self/status
    CapInh: 00000000a80425fb
    CapPrm: 00000000a80425fb
    CapEff: 00000000a80425fb
    CapBnd: 00000000a80425fb
    CapAmb: 0000000000000000
    $ capsh --decode=00000000a82425fb
    0x00000000a82425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_sys_admin,cap_mknod,cap_audit_write,cap_setfcap

    为什么 00000000a82425fb 相同而不指定任何 --cap-add 选项是有道理的。

    But other container runtimes could implement it, so is this comment just Docker specific?



    我想,所以您可能会遇到 privileged: falseallowPrivilegeEscalation: false 无法有效禁用功能的情况,并且可以使用 requiredDropCapabilities: 删除(尽管我不明白为什么另一个运行时会想要更改 Docker 行为)。

    关于docker - 为什么要求在 Kubernetes PodSecurityPolicy 冗余中删除所有功能并具有非 root + 禁止权限提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53328090/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com