为什么我的绑定安装在其安装名称空间之外可见?


12

因此,我试图了解Linux的安装名称空间的工作方式。因此,我做了一个小实验,打开了两个终端,然后运行以下命令:

1号航站楼

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

2号航站楼

root@goliath:~# ls b
foo.txt

在2号航站楼中如何看到安装座?由于它不是安装名称空间的一部分,因此我希望目录在此处显示为空。我也尝试通过传递-o shared=no和使用--make-private选项mount,但是得到了相同的结果。

我缺少什么?如何将其设为私有?


挂载是系统范围的,而不是特定于Shell环境的。共享,从属,私有和不可绑定不是您认为的那样。阅读man mount
cas 2015年

3
@cas:同意那--make-private不是我想要的。但是,这不是挂载名称空间的重点(它们不是系统范围的)吗?
FatalError 2015年

Answers:


11

如果您使用的是基于Systemd的发行util-linux版,且版本低于2.27,您将看到这种不直观的行为。这是因为根据内核中的设置CLONE_NEWNS传播标志shared。此设置通常是正常的private,但是systemd将其更改为shared。从util-linux2.27版本开始,制作了一个补丁程序,将unshare命令的默认行为更改private为默认传播行为,以便更加直观。

如果您使用的是<2.27的systemd系统util-linux,则必须运行以下unshare命令重新挂载根文件系统:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

如果您使用的是> = 2.27的systemd系统util-linux,则它应按您在问题中所给出的示例按原样运行,而无需重新安装。如果不是--propagation private,请执行以下unshare命令:强制将安装名称空间的传播变为私有。


0

这不适用于ubuntu(15.04和14.04)。它适用于软呢帽。还有软呢帽 是否需要--make-private,也可以检查

cat / proc / self / mountinfo | grep分享了

如果共享,则意味着其他名称空间仍然可以看到安装。然后是与系统有关的问题。您可以使用--make-private使其工作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.