在用户命名空间内,为什么不允许我重新挂载已挂载的文件系统?

在用户命名空间内,为什么不允许我重新挂载已挂载的文件系统?

https://github.com/systemd/systemd/issues/9914#issuecomment-416387637

$ uname -r
4.17.18-200.fc28.x86_64

$ unshare -U -r -m
# mkdir TMP
# mount -t tmpfs tmpfs TMP/
# mount -o remount,ro TMP/
mount: ./TMP: permission denied.

# grep TMP /proc/self/mountinfo
834 831 0:74 / /home/alan/TMP rw,relatime - tmpfs tmpfs rw,seclabel,uid=1001,gid=1001
# strace -f mount -o remount TMP/
...
mount("tmpfs", "/home/alan/TMP", 0x557c3cec9600, MS_REMOUNT|MS_RELATIME, "seclabel,uid=1001,gid=1001") = -1 EPERM (Operation not permitted)
...

绑定重新安装工作正常。

 # strace -f mount -o remount,bind,ro TMP/
 mount("tmpfs", "/home/alan/TMP", 0x5615b7ebc130, MS_RDONLY|MS_REMOUNT|MS_BIND|MS_RELATIME, "seclabel,uid=1001,gid=1001") = 0

答案1

它没有被实施。不过它会在下一个版本中出现!

v4.18 包含以下提交。这并没有提供以前不支持它的任何更具体的原因。

https://github.com/torvalds/linux/commit/bc6155d13260

fs:允许超级块所有者访问 do_remount_sb()

超级块级别的重新挂载当前仅限于全局 CAP_SYS_ADMIN,将根挂载更改为在卸载时只读的路径也是如此。放松这两项权限检查,以允许在任何对最初安装文件系统的用户有特权的命名空间中使用 CAP_SYS_ADMIN。

相关内容