
我的目標是為 KVM 來賓設定對 9p 共享的完全寫入存取權。主機和來賓都具有相同的使用者/群組和相同的 ID。主機和來賓都應該能夠使用相同的使用者名稱寫入共享,我不想區分檔案是由主機還是來賓寫入的。 kvm 程序以 root 身分運行 — 我在 /etc/libvirt/qemu.conf 中設定了user
和。group
root
在主機上的來賓定義中,共享定義如下:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/storage/data'/>
<target dir='data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
在來賓中,共用安裝為:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
問題是來賓中的根用戶無法寫入主機上非根用戶擁有的檔案/資料夾。更奇怪的是,來賓的 root 可以重新命名和刪除此類檔案。也就是說,當我在主機上以非根用戶身份建立檔案時,我根本無法以來賓根用戶身份編輯它,即使我可以重命名和刪除它!
我還發現,在非 root 使用者下在主機上建立的資料夾的權限設定為 777,來賓的 root 可以寫入該資料夾(即在其中建立檔案)。然而,這不適用於文件——無論權限如何,它們仍然無法編輯。
主機和來賓都運行 Linux 伺服器 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux。在Debian中,SELinux預設是停用的,我沒有啟用它。我嘗試了所有三種可用的 9p 存取模式(passthrough
、mapped
和squash
)——沒有區別。
只是想知道是否有什麼我可以調整讓它工作,或者這只是一個錯誤?
請注意,此處報告了類似的問題:使用 libvirt/qemu 對直通 (9p) 檔案系統進行讀取/寫入存取?但與這種情況不同的是,我對 root 擁有的文件擁有 100% 的寫入存取權限,這只是非 root 使用者文件,即使是來賓上的 root,我也無法寫入這些文件。
答案1
我遇到了類似的問題,但從未讓它與 9p 一起工作,正如其他評論者所說,9p 還不成熟。
我最終使用 samba 掛載主機檔案系統,並且工作正常。任何其他網路檔案系統也可能可以完成這項工作(例如 NFS,Red Hat 推薦;請參閱@Diagon 評論中的連結)https://access.redhat.com/discussions/1119043)。
答案2
您可以檢查檔案系統的附加屬性,例如共用目錄上的 acl 嗎?我懷疑權限問題。
答案3
在我的例子中,kvm 環境在使用者 libvirt 下運作。 (預設)然後,如果 /mnt/storage/data 由主機上的 libvirt-qemu.kvm 擁有,並且部署了 chmod 0777 /mnt/storage/data ,那麼它對我有用。我可以在來賓中以普通使用者身分建立目錄(例如 /mnt/storage/data/test/ ),而 root 可以執行您要求的所有任務。 (更重要的是,每個來賓使用者都可以刪除甚至是root 擁有的每個檔案。我透過將主機上的權限從777 更改為775 來解決這個問題。如果來賓中的使用者是該群組的一部分,他可以做任何事情如果沒有,他只有閱讀權限...)