对于 root 来说将设备安装为 RW,对于其他人来说则安装为 RO

对于 root 来说将设备安装为 RW,对于其他人来说则安装为 RO

我有一个设备,我想以完全权限挂载 root 并以只读方式挂载其他人。手册页告诉我这是可能的。

所以:

  • sudo mkdir /mnt/foo
  • sudo mkdir /mnt/fooReadOnly
  • sudo chmod 700 /mnt/foo(rw 仅适用于 root)
  • sudo chmod 555 /mnt/fooReadOnly(ro/给大家浏览一下)
  • 确保设备/dev/sdaX安装为/mnt/foo

然后我按照手册页的建议进行操作:

  • sudo mount --bind /mnt/foo /mnt/fooReadOnly
  • sudo mount -o remount,bind,ro /mnt/foo /mnt/fooReadOnly

现在来测试一下:

  • ls /mnt/foo--> Permission denied...正确的
  • sudo ls /mnt/foo作品..正确的
  • ls /mnt/fooReadOnly--> Permission denied...不正确?

它告诉我,我无法更改该绑定安装上的任何内容Read-only file system

我该如何解决?

另外,如何添加它/etc/fstab以便它在启动时自动重新安装?

答案1

我有一个设备,我想以完全权限挂载 root 并以只读方式挂载其他人。

  • sudo mkdir /root/mnt/foo
  • sudo mkdir /mnt/fooReadOnly
  • mount -oro /dev/sdaX /mnt/foo
    • 这确保设备 /dev/sdaX 已安装只读在 /mnt/foo 上。我首先进行了设置,因为不可能在一个步骤中创建只读绑定安装。我不想让用户访问读写绑定安装,即使只是一瞬间。
  • ls -ld /root- 仔细检查它显示的模式dr-xr-x---和所有者root root
  • sudo mount --bind /mnt/fooReadOnly /root/mnt/foo
  • sudo mount -oremount,rw /root/mnt/foo

尝试上面的命令。在每个挂载命令之后,您可以运行grep foo /proc/self/mountinfo,这会在单独的列中显示每个文件系统和每个挂载点标志。

要理解这一点,请知道mount -oremount,rw(或mount -oremount,ro) 同时更改每个文件系统标志和每个安装点标志。但它不会影响每个安装点的标志其他挂载点。


unshare -rm即使您切换到挂载 tmpfs 而不是 sdaX,也不可能在用户命名空间 ( ) 内尝试上述命令。它失败并显示“权限被拒绝” mount -oremount,rw。相反,您必须使用以下序列:

  • mount tmp -ttmpfs /root/mnt/foo
  • mount --bind /root/mnt/foo /root/mnt/fooReadOnly
  • mount -oremount,bind,ro /root/mnt/fooReadOnly
  • mount --bind /root/mnt/fooReadOnly /mnt/fooReadOnly

另外,如何将其添加到 /etc/fstab 以便它在启动时自动重新安装?

我建议不要将第一个序列改编为 fstab,因为它太过于 hack。您可以改为调整第二个顺序。

/dev/sdaX /root/mnt/foo ...
/root/mnt/foo /root/mnt/fooReadOnly none bind,ro
/root/fooReadOnly /mnt/fooReadOnly none bind

相关内容