Libvirt Ubuntu VM:共有フォルダのゲストによって生成されたファイルは、ホストのルートアクセス権のみを付与します。

Libvirt Ubuntu VM:共有フォルダのゲストによって生成されたファイルは、ホストのルートアクセス権のみを付与します。

次のコマンドを使用して、Ubuntu Server 16.04.5 LTSを実行しているサーバーにUbuntu VMを作成しました。

sudo virt-install \
 --name TEST \
 --memory 2048 \
 --vcpus 2 \
 --location 'http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/' \
 --os-variant ubuntu16.04 \
 --disk path=/pools/pool0/images/vm/test,size=150,bus=virtio,sparse=no,format=qcow2 \
 --filesystem type=mount,source=/pools/pool0/volumes/shared,target=shared,mode=mapped \
 --network network=vms \
 --graphics none \
 --virt-type kvm \
 --hvm \
 --console pty,target_type=serial \
 --extra-args 'console=ttyS0,115200n8 serial'

sharedゲストへの読み取りと書き込みを許可するために、マップされたアクセスを持つ共有フォルダを作成しました。

次に、次のコマンドを使用して仮想マシンを起動します。

virsh start TEST --console

ゲスト内で、/etc/fstab次の行を使用して共有フォルダを自動的にマウントするように編集しました。ここで、UID 1000は私のユーザーであり、GID 1000は他のメンバーを持たない接続グループです。

shared    /mnt    9p  trans=virtio,version=9p2000.L,rw,uid=1000,gid=1000    0   0

/mntクライアントディレクトリで実行すると、ls -ln次の出力が得られます。

$ ls -ln /mnt
total 42
drwxrwxr-x 8 1000 1000  8 Jul 28 23:52 Backups
drwxrwxr-x 6 1000 1000  6 Dec 28 00:15 Media
drwxrwxr-x 6 1000 1000 67 Mar 31  2018 Misc
drwxrwxr-x 2 1000 1000  4 Mar 31  2018 Recipes

ls -lnディレクトリのホストで実行すると同じ出力が得られます/pools/pool0/volumes/shared

$ ls -ln /pools/pool0/volumes/shared
total 42
drwxrwxr-x 8 1000 1000  8 Jul 28 23:52 Backups
drwxrwxr-x 6 1000 1000  6 Dec 28 00:15 Media
drwxrwxr-x 6 1000 1000 67 Mar 31  2018 Misc
drwxrwxr-x 2 1000 1000  4 Mar 31  2018 Recipes

ゲストでは、私と同じように(権限のないユーザー)ファイルとフォルダを作成および変更できます。

$ mkdir /mnt/Media/test-dir
$ touch /mnt/Media/test-file
$ ls -ln /mnt/Media
total 75
drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies
drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music
drwxrwxr-x  75 1000 1000  75 Jul 16 21:02 Photos
drwxrwxr-x   2 1000 1000   2 Dec 29 20:30 test-dir
-rw-rw-r--   1 1000 1000   0 Dec 29 20:31 test-file
drwxrwxr-x  15 1000 1000  15 Dec 18 15:40 TV Shows

ただし、ホストオペレーティングシステムでは、次のファイルとフォルダにルートアクセス権のみが付与されます。

$ ls -ln /pools/pool0/volumes/shared/Media
total 75
drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies
drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music
drwxrwxr-x  75 1000 1000  75 Jul 16 21:02 Photos
drwx------   2    0    0   2 Dec 29 20:30 test-dir
-rw-------   1    0    0   0 Dec 29 20:31 test-file
drwxrwxr-x  15 1000 1000  15 Dec 18 15:40 TV Shows

1000サーバーで自動化スクリプトを実行しており、これらのスクリプトが機能するには、UID、GID 1000、ディレクトリ権限(775)、およびファイル権限(664)を使用してrwxrwxr-xこれらのフォルダとディレクトリを作成する必要がありますrw-rw-r--。新しいファイル/ディレクトリを作成するたびに手動で実行したくありませんchmodchownsudo

仮想マシンを最初から再インストールせずにこの問題を解決する必要があります。

答え1

気になる人がいたら、私の問題に対する解決策を見つけることができませんでした。しかし、私はホスティングを通じてこれを行いました。サンバシェアホスト(dperson / samba dockerコンテナを使用)とゲストにcifs-utils次の行をインストールし、次に追加しました\etc\fstab

//192.168.1.7/Shared  /media/shared  cifs  guest,uid=1000,iocharset=utf8,vers=3.0 0 0

ここで、は192.168.1.7ホストシステムのIPアドレス、SharedはSamba共有の名前、およびは/media/sharedゲストから共有をマウントした場所です。

答え2

mode=passthrough代わりに使用する必要がありますmode=mapped。ここでよく説明されています。https://rabexc.org/posts/p9-setup-in-libvirt

関連情報