
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 ユーザーが所有するファイル/フォルダに書き込むことができないことです。さらに奇妙なことに、ゲストの root は、そのようなファイルの名前を変更したり、削除したりできます。つまり、ホスト マシンで非 root ユーザーとしてファイルを作成すると、ゲストの root としてそのファイルを編集することはできませんが、名前を変更したり、削除したりすることはできます。
また、非ルート ユーザーでホスト上に作成されたフォルダーの権限が 777 に設定されている場合、ゲストのルートはそこに書き込むことができます (つまり、そこにファイルを作成できます)。ただし、これはファイルには適用されません。権限に関係なく、ファイルを編集することはできません。
ホストとゲストの両方で、Linux サーバー 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux が実行されています。Debian では、SELinux はデフォルトで無効になっており、有効にしませんでした。利用可能な 3 つの 9p アクセス モード ( passthrough
、mapped
およびsquash
) をすべて試しましたが、違いはありませんでした。
これを動作させるために調整できる点があるか、それとも単なるバグなのか知りたいのですが。
ここでも同様の問題が報告されていることに注意してください:libvirt/qemu を使用したパススルー (9p) ファイルシステムへの読み取り/書き込みアクセス?しかし、その場合とは異なり、ルートが所有するファイルには 100% の書き込みアクセス権があり、ゲストでルートであっても書き込むことができないのは、ルート以外のユーザーのファイルだけです。
答え1
私も同様の問題を抱えていましたが、9p では動作しませんでした。他のコメント投稿者が言うように、9p はまだ成熟していません。
結局、ホストファイルシステムをマウントするのに samba を使いましたが、うまく動作しています。おそらく、他のネットワークファイルシステムでも同じように動作するでしょう (例: Red Hat が推奨する NFS。@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 に変更することで、その問題を管理しました。ゲストのユーザーがグループの一部である場合、そのユーザーはすべての操作を実行できますが、そうでない場合は読み取り権限しかありません...)