我有一个设备,我想以完全权限挂载 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