Linux
以 <user> 身份掛載,循環仍然分配 root 所有權
我正在嘗試從文件設置虛擬驅動器。然後,該文件將被寫入快閃記憶體設備(不相關)。因為創建和操作虛擬驅動器將在腳本中進行,所以我需要在使用者空間中進行,即不是以 root 身份。該腳本用於為快閃記憶體設備建構和創建映像;因此,以 root 身份執行將是有問題的。
為了將文件掛載為虛擬驅動器,我在 /etc/fstab 中添加了以下行:
/home/user/drive.img /home/user/mnt ext4 loop,rw,user,noauto,noexec 0 0
問題是,當我掛載虛擬驅動器時,root 擁有 ~/mnt 的所有權,違背了以普通使用者身份掛載它的目的。
我知道其他文件系統允許您在指定 uid/gid 時掛載,但虛擬驅動器必須是 ext4 才能與現有程序兼容。我嘗試了 udisksctl,但它需要 root 身份驗證才能進行環回。
我將嘗試安裝然後更改所有權(以 root 身份),但永遠不要解除安裝它。我將進行“同步”,然後拍攝虛擬驅動器的快照。我不喜歡它,因為它不干淨,但它現在可能有用。
您沒有提到的步驟是您如何創建 ext4 文件系統,這是問題的根源。使用
mkfs.ext4 /home/user/drive.img
會創建一個root擁有的根inode,所以當你掛載它時,它仍然屬於root。解決方案是添加選項
-E root_owner
以使其屬於正在執行的使用者mkfs.ext4
,甚至屬於-E root_owner=$uid:$gid
某些明確的數字使用者和組 id。(另一種解決方案是使用debugfs
(Fedora 的軟體包e2fsprogs
)來編輯 inode。)這個例子對我有用:uid=$(id -u) gid=$(id -g) rm -f /tmp/ext4fs truncate -s 50M /tmp/ext4fs if true then mkfs.ext4 -E root_owner=$uid:$gid /tmp/ext4fs else mkfs.ext4 /tmp/ext4fs debugfs -w -R "set_inode_field . uid $uid" /tmp/ext4fs debugfs -w -R "set_inode_field . gid $gid" /tmp/ext4fs fi # echo '/tmp/ext4fs /tmp/mymnt ext4 loop,rw,user,noauto,noexec' >>/etc/fstab mkdir -p /tmp/mymnt mount /tmp/ext4fs ls -lRa /tmp/mymnt touch /tmp/mymnt/afile ls -l /tmp/mymnt umount /tmp/ext4fs
在掛載時
ls
,掛載點顯示為drwxr-xr-x 3 meuh users 1024 May 15 21:04 .
並允許我在那裡創建一個文件。