只读bind-mount?

我使用mount -o bind来在chroots中挂载目录,这非常有效。 问题是,我想这些绑定安装的目录只能在chroot中读取。

可能吗? 如果没有 – 其他方式来实现它?

我正在考虑使用NFS的本地主机坐骑,但它看起来像矫枉过正。

    对此可以接受。 你确实需要一个最近的内核。

    从LWN文章直接回答:

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

    自Linux 2.6.26以来支持。

    在挤压它只用于:

     mount --bind /src /dst 

    然后

     mount -o remount,ro /dst 

    现在在Debian Wheezy中你必须这样做:

     mount -o remount,ro,bind /dst 

    摆脱资源繁忙的消息。

    编辑:现在在Debian杰西,安装尝试变得聪明,并挂载子目录,如果已经装入绑定,得到recursion和坏事情发生:)

    有一个特殊的选项强制util-linux再次变得“愚蠢”。 解决方法是:

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

    之后,你可以mount –bind $ prefix / sbin到另一个目录。

    从手册页:

    共享的子树操作。 从Linux 2.6.15开始,可以将mount和它的submount标记为shared,private,slave或unbindable。 共享安装提供了创build该安装的镜像的能力,以便在任何镜像中安装和卸载传播到其他镜像。 从属装置从其主装置接收传播,但反之亦然。 私人装载不具有传播能力。 不可绑定的挂载是不能通过绑定操作克隆的私有挂载。 详细的语义logging在内核源码树的Documentation / filesystems / sharedsubtree.txt文件中。 支持的操作是:

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

    以下命令允许recursion地更改给定挂载点下所有挂接的types。

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

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

    由于util-linux 2.23,mount命令允许一起使用多个传播标志,并且还可以与其他安装操作一起使用。 这个function是实验性的。 当前面的安装操作成功时,传播标志将通过附加的mount(2)系统调用来应用。 请注意,这个用例不是primefaces的。 可以在fstab(5)中指定传播标志作为挂载选项(私有,从属,共享,不可绑定,rprivate,rslave,rshared,runbindable)。

    mount –bind / vital_data / untrusted_container / vital_data

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

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