你可能不知道,Podman 在一段时间内一直以比 Docker 更少的能力运行。Podman 不仅默认以无根模式运行,即使在无根模式下,它也比 Docker 运行得更严格。Docker 以 14 个根能力运行,而 Podman 以 10 个能力运行。
然而,这主要是通过发行版默认设置而不是内置默认设置实现的。Fedora、RHEL、Centos 和其他基于 Fedora containers-common rpm 的发行版一直通过 /usr/share/containers/containers.conf 文件提供以下功能列表。
default_capabilities = ["CHOWN", "DAC_OVERRIDE", "FOWNER", "FSETID", "KILL", "NET_BIND_SERVICE", "SETFCAP", "SETGID", "SETPCAP", "SETUID"]
其他发行版可以提供自己的默认设置。本周我更改了 container/common 中的默认设置,因此内置默认设置现在将只有 10 个能力。这意味着当 Podman 4.4 发布时,所有发行版都将使用这些默认设置,除非它们在 containers.conf 文件中覆盖它们。
我们删除了哪四个?
CAP_CHROOT:允许容器内的进程设置 chroot。多年来,我们很少看到容器需要此功能。
CAP_AUDIT_WRITE:允许进程修改和写入审计子系统。当人们尝试在容器内运行 sshd 时,可能需要此功能。
CAP_MKNOD:这允许容器进程创建设备节点。设备节点由 Podman 创建,允许进程创建设备节点被认为是危险的。
CAP_NET_RAW:这允许容器进程组装自己的网络数据包。这非常危险,因为它可能触发网络堆栈中的错误。ping 需要它,但我们添加了一个 sysctl 以允许在没有 CAP_NET_RAW 的情况下进行 ping 操作。
# 默认情况下在容器中设置的 sysctl 列表,
# 指定为“name=value”
# 例如:“net.ipv4.ping_group_range=0 0”。
#
default_sysctls = [
“net.ipv4.ping_group_range=0 0”,
]
如果您的容器需要其中一个功能,则很容易添加回去。
podman run –cap-add NET_RAW …
留言