簡體   English   中英

root 能否可靠地確定每個掛載(“綁定掛載”)標志,例如 FUSE 文件系統?

[英]Can root reliably determine the per-mount ("bind mount") flags e.g. for a FUSE filesystem?

由非 root 用戶掛載的 FUSE 文件系統不能被 root 訪問(除非在掛載上使用了allow_other )。

作為 root,我想查詢每個掛載標志,例如nosuid ,以便我可以使用mount()MS_REMOUNT|MS_BIND|...添加每個掛載MS_RDONLY標志。 我已經在大多數文件系統上成功使用statvfs()查詢現有的掛載標志。 但是有沒有辦法實現它來處理像 FUSE(和帶有 root_squash 的 NFS)這樣的情況?

是的。 statvfs()適用於這種情況。 同時,它避免了 FUSE 文件系統的阻塞。

$ mkdir mnt
$ bindfs --no-allow-other mnt mnt
$ stat -f mnt
  File: "mnt"
    ID: 0        Namelen: 255     Type: fuseblk
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 78150265   Free: 8223357    Available: 4722313
Inodes: Total: 19857408   Free: 18558102

$ strace stat -f mnt
...
statfs("mnt", {f_type=FUSE_SUPER_MAGIC, f_bsize=0, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={val=[0, 0]}, f_namelen=0, f_frsize=0, f_flags=ST_VALID|ST_NOSUID|ST_NODEV|ST_RELATIME}) = 0
...

  File: "mnt"
    ID: 0        Namelen: 0       Type: fuseblk
Block size: 0          Fundamental block size: 0
Blocks: Total: 0          Free: 0          Available: 0
Inodes: Total: 0          Free: 0
+++ exited with 0 +++

statvfs()被明確記錄為不需要訪問目標目錄,只需要訪問父目錄。

EACCES (statvfs()) 對路徑的路徑前綴的組件的搜索權限被拒絕。 (另見 path_resolution(7)。)

不幸的是,您重新安裝的過程確實存在競爭條件,如果您無法打開目標目錄,則無法修復。 注意O_PATH使您無需對目錄本身具有任何權限即可打開目錄。 (然后可以使用/proc/self/fd/%dO_PATH fds 尋址為路徑,包括通過mount() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM