[英]How to register FUSE filesystem type with mount(8) and fstab?
[英]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/%d
將O_PATH
fds 尋址為路徑,包括通過mount()
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.