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--. 새 파일/디렉토리를 만들 때마다 수동으로 실행하고 싶지 않습니다 chmod.chownsudo

가상 머신을 처음부터 다시 설치하지 않고 이 문제를 해결해야 합니다.

답변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.

관련 정보