Fedora 下挂载命名空间的问题

lar*_*sks 5 linux mount container virtualization

我遇到了一个关于 Linux 上挂载命名空间的奇怪问题。我有两个系统,两个 X86_64 都在 Fedora 16 下运行内核 3.2.3-2。我试图tmpfs在使用以下unshare命令创建的子命名空间中挂载文件系统:

unshare -m /bin/bash
Run Code Online (Sandbox Code Playgroud)

从手册页:

   mount namespace
          mounting and unmounting filesystems will not affect rest of  the
          system (CLONE_NEWNS flag),
Run Code Online (Sandbox Code Playgroud)

在一个系统上,这按预期工作。也就是说,如果我从这个开始:

# ls /mnt
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

然后在子命名空间中挂载tmpfs文件系统/mnt

# PS1="child# ' unshare -m /bin/bash
child# mount -t tmpfs tmpfs /mnt
Run Code Online (Sandbox Code Playgroud)

的内容/mnt在子命名空间中被屏蔽:

child# ls /mnt
child#
Run Code Online (Sandbox Code Playgroud)

但继续在父级中可见:

# ls /mnt
file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

在第二个系统上,完全相同的命令序列将导致在父命名空间和子命名空间中可见的挂载。换句话说,似乎该unshare命令实际上并没有产生单独的挂载命名空间。

我不知道这两个系统之间有任何实质性差异。一个是运行桌面环境,另一个不是。SELinux 在两个系统上都被禁用。

我正在寻找有关可能导致这种行为差异的原因的任何建议。

小智 5

检查沙箱服务是否正在运行。

systemctl status sandbox.service
Run Code Online (Sandbox Code Playgroud)

如果是这样,请将其关闭,重新启动,然后重试。这对我有用。

  • 先生,您中奖了。看起来好像简单地运行 `mount --make-rprivate /` 将撤销 `/etc/rc.s/init.d/sandbox` 的效果。现在我需要弄清楚是否需要沙盒脚本,因为我没有使用 pam_namespace ... (2认同)