只读绑定安装?


9

我使用mount -o bind在chroots中装载目录,这确实很好。问题是我希望其中一些绑定安装的目录只能在chroot中读取。

可能吗?如果不是-是否有其他实现方法?

我曾考虑过将NFS用于本地主机挂载,但是这看起来有些过分。

Answers:


6

根据这篇文章是可能的。您确实需要最新的内核。

mount --bind -o ro /vital_data /untrusted_container/vital_data

16

LWN文章的直接答案:

mount --bind /vital_writable_data /untrusted_container/vital_data
mount -o bind,remount,ro /untrusted_container/vital_data

从Linux 2.6.26开始受支持。


4

在Squeeze中,它仅适用于:

mount --bind /src /dst

然后

mount -o remount,ro /dst

现在在Debian Wheezy中,您必须执行以下操作:

mount -o remount,ro,bind /dst

摆脱:资源繁忙消息。

编辑:现在在Debian Jessie中,mount尝试变得聪明并装载sub dirs,如果已经用bind装载了,则会递归,并发生不好的事情:)

有一个特殊的选项可以迫使util-linux再次变得“愚蠢”。解决方案是这样的:

mount --bind --make-rprivate /sbin/ $prefix/sbin/
mount -o remount,ro,bind $prefix/sbin/

之后,您可以将--bind $ prefix / sbin挂载到另一个目录。

从手册页:

共享子树操作。从Linux 2.6.15开始,可以将安装及其子安装标记为共享,专用,从属或不可绑定。共享的安装提供了创建该安装的镜像的功能,以便任何一个镜像中的安装和卸载都传播到另一个镜像。从安装架从其主接收传播,反之亦然。专用安装架没有传播功能。不可绑定的安装是无法通过绑定操作克隆的专用安装。详细的语义记录在内核源代码树的Documentation / filesystems / sharedsubtree.txt文件中。支持的操作有:

     mount --make-shared mountpoint
     mount --make-slave mountpoint
     mount --make-private mountpoint
     mount --make-unbindable mountpoint

以下命令允许递归地更改给定安装点下所有安装的类型。

     mount --make-rshared mountpoint
     mount --make-rslave mountpoint
     mount --make-rprivate mountpoint
     mount --make-runbindable mountpoint

请求--make- *操作时,mount(8)不会读取fstab(5)。必须在命令行上指定所有必需的信息。请注意,Linux内核不允许通过单个mount(2)syscall更改多个传播标志,并且这些标志不能与其他安装选项混合使用。

从util-linux 2.23开始,mount命令允许一起使用多个传播标志,也可以与其他安装操作一起使用。此功能是实验性的。当前面的安装操作成功完成时,传播标志将通过附加的mount(2)系统调用来应用。请注意,该用例不是原子的。可以在fstab(5)中将传播标志指定为安装选项(专用,从属,共享,不可绑定,rprivate,rslave,rshared,runbindable)。


2

挂载--bind / vital_data / untrusted_container / vital_data

挂载-o remount,ro,bind / untrusted_container / vital_data

在第二次安装中,您必须使用“ remount,ro,bind”,否则/ vital_data的所有其他实例也将变为只读。


不,您不需要(至少在Linux 3.19上不这样)。您在哪里遇到了添加bind选件的必要性?
Karl Richter

1
@KarlRichter-我尚未对其进行测试,但man 2 mount表明它bind是必需的:“自Linux 2.6.26起,该MS_REMOUNT标志可用于MS_BIND仅修改每个安装点标志。这对于设置或清除“读取”特别有用。 “在挂载点上使用-only”标志,而不更改基础文件系统。MS_REMOUNT | MS_BIND | MS_RDONLY将mountflags指定为:将使通过此挂载点的访问为只读,而不会影响其他挂载点。” (来自Ubuntu 19.10,Linux man-pages版本5.0.2,日期为2019-08-02。)
mpb

1
@KarlRichter-更新:根据unix.stackexchange.com/a/128388,在程序的一次调用期间,较新版本libmountmount()函数将调用两次/usr/bin/mount。因此libmount,将确定是否/usr/bin/mount需要两次调用,而不是内核版本。
mpb
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.