Libvirt Ubuntu VM:在共享文件夹中的来宾上创建的文件在主机上仅提供 root 访问权限

Libvirt Ubuntu VM:在共享文件夹中的来宾上创建的文件在主机上仅提供 root 访问权限

我使用以下命令在运行 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

但是,在主机操作系统上,这些文件和文件夹仅被授予 root 访问权限:

$ 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、目录权限rwxrwxr-x(775) 和文件权限(664)创建这些文件夹和目录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

相关内容