Linux

在使用者命名空間內,為什麼不允許我重新掛載已掛載的文件系統?

  • August 27, 2018

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

它沒有被實施。雖然它在下一個版本中!

v4.18 包含以下送出。這並沒有提供任何更具體的原因來說明它以前不受支持。

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

fs:允許超級塊所有者訪問 do_remount_sb()

超級塊級別的重新掛載目前僅限於全域 CAP_SYS_ADMIN,在 umount 上將根掛載更改為只讀的路徑也是如此。放鬆這兩個權限檢查,以允許 CAP_SYS_ADMIN 在任何對最初安裝文件系統的使用者具有特權的命名空間中。

引用自:https://unix.stackexchange.com/questions/465202