我可以将无根 podman 与常规用户命名空间(在 podman 外部创建)一起使用吗?

我可以将无根 podman 与常规用户命名空间(在 podman 外部创建)一起使用吗?

如果我使用创建 uts 命名空间unshare并将主机名设置为foo

$ unshare --map-root-user --uts /bin/sh
# echo $$
31882
# readlink /proc/31882/ns/uts
uts:[4026532825]
# hostname foo

然后我如何在 rootless 内部使用该用户命名空间podman而不运行sudo,例如这不起作用并返回“错误:找不到指定的 UTS 命名空间路径:stat [proc-ns-link]:权限被拒绝”

$ podman run -ti --uts=ns:/proc/31882/ns/uts alpine:3 /bin/hostname
Error: cannot find specified UTS namespace path: stat /proc/31882/ns/uts: permission denied

但这确实有效,

$ sudo podman run -ti --uts=ns:/proc/31882/ns/uts alpine:3 /bin/hostname
foo

答案1

我不熟悉,podman但如果有人需要使用进入另一个命名空间,/proc/31882/ns/uts那么他必须使用setns系统调用。

为了将自身与新的网络、IPC、时间或 UTS 命名空间重新关联,调用者必须在其自己的用户命名空间和拥有目标命名空间的用户命名空间中都具有 CAP_SYS_ADMIN 功能。参考:https://man7.org/linux/man-pages/man2/setns.2.html

因此,如果没有CAP_SYS_ADMIN(sudo) 功能,调用者就无法进入另一个命名空间。如果这可能的话,那就是一个安全问题。

附加说明:将 suid 位设置为podman二进制将允许运行功能podmanCAP_SYS_ADMIN无需提及,sudo但我希望您不要期待这个答案。

相关内容