ホストとゲストの共有ディレクトリで適切な権限を取得するには、libvirt / virt-managerのumaskを設定します。

ホストとゲストの共有ディレクトリで適切な権限を取得するには、libvirt / virt-managerのumaskを設定します。

virt-manager/libvirt/QEMU/KVM仮想マシンのホストシステムとゲストシステムの両方で完全に使用でき、両方のシステムでroot以外のユーザーに対する読み取り、書き込み、および実行権限を持つディレクトリを作成しようとしています。どちらのオペレーティングシステムもDebian(ホスト用のWheezy、ゲスト用のJessie)です。 1つの例外を除いて、ほとんど成功しました。ゲストOSで作成されたファイルと共有ディレクトリは、ホストシステムのルート以外のユーザーがアクセスできませんでした。

私が経験している問題は、ゲストOSの共有ディレクトリに新しいファイルを作成すると、そのファイルを作成するためのvirt-manager / libvirtの権限が700に設定されることです(所有者のフルアクセス - この場合、ユーザー名は同じです。libvirt-qemu、他のユーザーやグループには権限がありません)。本質的に、これはlibvirt-qemuユーザーセッションumaskを077に設定するのと同じです。これにより、ホストの root 以外のユーザーがこれらのファイルにアクセスできなくなります。

私が実装しようとしている解決策は、libvirt-qemuホストOSのユーザーと他の関連ユーザーの両方が呼び出される追加の新しいセカンダリユーザーグループにvmshares属し、そのグループが所有する共有ディレクトリを持ち、vmsharesSGIDビットを設定してすべてのコンテンツが所有されますvmshares。達成する必要があります。ただし、007を使用する必要がある場合、virt-managerは077以外のumaskを使用してホスト共有に新しいファイルを作成し、そのファイルにグループメンバーにフルアクセス許可を与えることはできないようですvmshares

libvirt-qemuユーザーのumaskポリシーを実装するために、次の内容で新しいファイル/etc/pam.d/libvirtを作成してみました。

libvirtd session requisite pam_umask.so umask=0007

.profileまた、次の行を使用して/var/lib/libvirt/にファイルを作成してみました。

umask 007

また、/etc/init.d/libvirt-binのlibvirt-bin initスクリプトの上部付近にこの行を追加してみました。

virt-manager/libvirtは、これらすべてを完全に無視しているようです。

ホストとゲストシステムの両方で完全に利用可能な共有ディレクトリを確保する目的をどのように達成できますか?

答え1

私はこれが非常に古い投稿であることを知っていますが、最近libvirtにパッチを送信してこの問題を解決しました。 libvirt v6.10から開始、9pfs共有に「fmode」および「dmode」オプションを指定して、それぞれファイルとディレクトリのデフォルトのホスト権限を制御できます。

v6.10を実行できない場合は、qemu:commandlinelibvirtのXMLドメイン機能を使用してネイティブQEMUフラグを渡す回避策を見つけました。私は書いたブログ投稿これを行う方法のクイックバージョンは、次のようなものを置くことです。

<commandline xmlns="http://libvirt.org/schemas/domain/qemu/1.0">
  <arg value="-fsdev"/>
  <arg value="local,security_model=mapped,id=fsdev-fs0,path=/path/to/share,fmode=0644,dmode=0755"/>
  <arg value="-device"/>
  <arg value="virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=sharename,bus=pci.6,addr=0x0"/>
</commandline>

ドメインXMLを「ドメイン」の子として入力します。ブログ記事ではこれらの値について詳しく説明していますが、ドメインに合わせて、および調整する必要があるfsdev-fs0かもfs0しれません。sharename

関連情報