如何退出 Linux 命名空间?

如何退出 Linux 命名空间?

我创建了一个新的用户命名空间:

unshare -U bash

如何在不关闭新创建的命名空间的情况下从该命名空间退出并返回父命名空间,以便稍后重新进入?

我尝试坚持它(以便nsenter之后):

unshare --user=/root/uts-ns hostname

但失败了:

unshare: mount /proc/2731/ns/user on /root/uts-ns failed: Operation not permitted

答案1

持久命名空间是通过创建绑定挂载来创建的 - 用于mount --bind将代表命名空间的 /proc 文件“固定”到另一个路径。这意味着该unshare进程需要具有相对于初始命名空间的 root 权限。

然而,如果unshare创建一个用户命名空间,然后进入新的命名空间后不再具有 root 权限 – 它仍然是 UID 0新的命名空间,但它没有映射到“真实”UID 0,因此您不允许创建任何新的挂载。

您仍然可以手动执行此操作 - 首先在一个终端窗口中创建命名空间,然后在另一个终端(命名空间之外)手动挂载命名空间文件。或者,在“取消共享”过程在后台时执行此操作:

# unshare --user &
# mount --bind /proc/$!/ns/user /root/user-ns
# kill -9 $!

(此外,不要混淆用户命名空间和 UTS 命名空间。)

相关内容