dip*_*ark 4 containers docker linux-capabilities kubernetes
PodSecurityPolicy 文档中的第二个示例策略包含以下 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
...
Run Code Online (Sandbox Code Playgroud)
为什么删除非 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
Run Code Online (Sandbox Code Playgroud)
即使在尝试明确添加它们时,所有有效功能也已被删除。但是其他容器运行时可以实现它,所以这个评论只是 Docker 特定的吗?
为什么删除非 root 用户的所有功能是多余的 + 禁止权限提升?
因为您需要提升权限才能使用“新”功能,因此在execve系统调用中allowPrivilegeEscalation: false禁用setuid可以有效地阻止使用任何新功能。
同样如文档中所示:“一旦设置了该位,它将跨 fork、clone 和 execve 继承,并且不能取消设置”。更多信息在这里。
这与privileged: false呈现requiredDropCapabilities: [ALL]冗余相结合。
此处等效的 Docker 选项是:
--user=whatever => privileged: false--security-opt=no-new-privileges => allowPrivilegeEscalation: false--cap-drop=all => requiredDropCapabilities: [ALL]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
Run Code Online (Sandbox Code Playgroud)
如果00000000a82425fb不指定任何--cap-add选项,这将是有道理的。
但是其他容器运行时可以实现它,所以这个评论只是 Docker 特定的吗?
我想,所以你可能会遇到这样的情况,privileged: false并且allowPrivilegeEscalation: false不能有效地禁用功能,并且可以将其删除requiredDropCapabilities:(尽管,我不明白为什么另一个运行时会想要更改 Docker 行为)。
| 归档时间: |
|
| 查看次数: |
3593 次 |
| 最近记录: |