Permissions
使用 udisks2 掛載使用者可讀的映像
循環設備,即用於掛載原始磁碟映像的設備,可以在沒有 root 權限的情況下使用 udisk 進行管理。
出於測試目的,可以像這樣創建和格式化圖像:
dd if=/dev/urandom of=img.img bs=1M count=16 mkfs.ext4 img.img
然後使用 udisks 進行設置
udisksctl loop-setup -f img.img
這會為映像創建一個循環設備並將其掛載到 下的新目錄
/run/$USER
,就像任何由 udisk 管理的本地硬碟驅動器一樣。只有權限不是我所期望的。# ls -l /run/media/$USER/ drwxr-xr-x 3 root root 1024 Apr 10 11:19 [some id] drwx------ 1 auser auser 12288 Oct 30 2012 [a device label]
列出的第一個是循環設備,由 root 擁有,其他任何人都不能寫。第二個是本地硬碟驅動器或安裝的USB筆設備進行比較,屬於安裝它的使用者。我知道我可以通過簡單
chmod
的以 root 身份執行來解決這個問題。但是為什麼 udisks 分配不同的權限和所有者呢?可以將其配置為以其他方式執行嗎?
我詳細查看了 udisks2 原始碼並在那裡找到了解決方案。
在使用者權限下正確掛載的設備使用舊文件系統進行格式化,例如
fat
. 這些接受uid=
和gid=
掛載選項來設置所有者。Udisks 自動將這些選項設置為發出掛載請求的使用者的使用者和組 ID。現代文件系統,如 ext 系列,沒有這樣的選項,而是記住根節點的所有者和模式。所以
chown auser /run/media/auser/[some id]
確實持續有效。另一種方法是將新創建的文件系統的 uid 和 gid 傳遞-E root_user
給mkfs.ext4
它的創建者。