我创建了一个新的用户命名空间:
unshare -U bash
如何在不关闭新创建的命名空间的情况下从这个命名空间退出到父命名空间,以便之后重新进入它?
我试图坚持它(为了nsenter
之后):
unshare --user=/root/uts-ns hostname
但它失败了:
unshare: mount /proc/2731/ns/user on /root/uts-ns failed: Operation not permitted
我创建了一个新的用户命名空间:
unshare -U bash
如何在不关闭新创建的命名空间的情况下从这个命名空间退出到父命名空间,以便之后重新进入它?
我试图坚持它(为了nsenter
之后):
unshare --user=/root/uts-ns hostname
但它失败了:
unshare: mount /proc/2731/ns/user on /root/uts-ns failed: Operation not permitted
持久命名空间是通过创建绑定挂载来创建的——用于
mount --bind
将代表命名空间的 /proc 文件“固定”到另一个路径。这意味着该unshare
进程需要具有相对于初始命名空间的 root 权限。但是,如果
unshare
正在创建用户命名空间,那么在进入新命名空间后,它不再具有 root 权限——在新命名空间中它仍然是 UID 0,但它没有映射到“真实”的 UID 0,所以你不能创建任何新坐骑。您仍然可以手动进行 - 首先在一个终端窗口中创建命名空间,然后在另一个终端(命名空间之外)手动挂载命名空间文件。或者,在“取消共享”过程处于后台时执行此操作:
(另外,不要混淆用户命名空间和 UTS 命名空间。)