我正在尝试创建一个对 virt-manager/libvirt/QEMU/KVM 虚拟机的主机和来宾系统完全可用的目录,并且两个系统的非 root 用户都具有读、写和执行权限。两个操作系统都是 Debian - 主机是 Wheezy,访客是 Jessie。我基本上是成功的,但有一个例外 - 在来宾操作系统和共享目录中创建的文件对于主机系统上的非 root 用户是无法访问的。
我遇到的问题是,当在来宾操作系统的共享目录中创建新文件时,virt-manager/libvirt 创建它们的权限设置为 700(所有者的完全访问权限 - 在本例中,用户名为libvirt-qemu
,并且任何其他用户或组没有任何权限)。本质上,这相当于将 libvirt-qemu 用户的会话 umask 设置为 077。这使得主机的非 root 用户无法访问这些文件。
我试图实现的解决方案是让libvirt-qemu
主机操作系统上的用户和相关其他用户都属于一个名为 的附加新辅助用户组vmshares
,并拥有该组拥有的共享目录vmshares
,并设置了 SGID 位让它的所有内容也被拥有vmshares
——这应该可以实现我想要的。但是,当我需要使用 007 时,我似乎无法让 virt-manager 使用除 077 之外的任何 umask 在主机共享目录中创建新文件,以便这些文件也向组成员授予完全权限vmshares
。
我尝试创建一个包含以下内容的新文件 /etc/pam.d/libvirt 来为 libvirt-qemu 用户实施 umask 策略:
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:commandline
libvirt 的 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
来适应您的域。