我的目标是为 KVM 来宾设置对 9p 共享的完全写入访问权限。主机和来宾都具有相同 ID 的相同用户/组。主机和来宾都应该能够使用相同的用户名写入共享,我不想区分文件是由主机写入还是由来宾写入。kvm 进程以 root 身份运行——我在 /etc/libvirt/qemu.conf 中设置了user
和group
to root
。
在主机上的guest定义中,共享定义如下:
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/storage/data'/>
<target dir='data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
Run Code Online (Sandbox Code Playgroud)
在来宾中,共享安装为:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
Run Code Online (Sandbox Code Playgroud)
问题是来宾中的 root 用户无法写入主机上非 root 用户拥有的文件/文件夹。更奇怪的是,guest 的 root 可以重命名和删除此类文件。也就是说,当我在主机上以非 root 用户身份创建文件时,即使我可以重命名和删除它,我也无法以访客的 root 用户身份编辑它!
我还发现,在主机上以非 root 用户创建的文件夹的权限设置为 777,来宾的 root 可以写入(即在其中创建文件)。但是,这不适用于文件 - 无论权限如何,它们仍然无法编辑。
主机和来宾都运行 Linux 服务器 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux。在 Debian 中,SELinux 默认是禁用的,我没有启用它。我尝试了所有三种可用的 9p 访问模式(passthrough
、mapped
和 …