Linux

以 <user> 身份掛載,循環仍然分配 root 所有權

  • May 22, 2021

我正在嘗試從文件設置虛擬驅動器。然後,該文件將被寫入快閃記憶體設備(不相關)。因為創建和操作虛擬驅動器將在腳本中進行,所以我需要在使用者空間中進行,即不是以 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' &gt;&gt;/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 .

並允許我在那裡創建一個文件。

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