Mar*_*rth 8 linux permissions virtual-machine umask virt-manager
我正在尝试创建一个对 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 似乎完全忽略了所有这些。
请问,我怎样才能实现在主机和来宾系统上都拥有一个完全可用的共享目录的目标?
小智 2
我意识到这是一篇非常老的帖子,但我最近刚刚通过向 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>
Run Code Online (Sandbox Code Playgroud)
作为“域”的子项进入您的域 XML。该博客文章更详细地介绍了这些值,但您可能需要调整fsdev-fs0、fs0和sharename来适应您的域。