我的目标是为 KVM 客户机设置对 9p 共享的完全写入权限。主机和客户机都具有相同的用户/组和相同的 ID。主机和客户机都应该能够使用相同的用户名写入共享,并且我不想区分文件是由主机还是客户机写入的。kvm 进程以 root 身份运行 — 我在 /etc/libvirt/qemu.conf 中进行了user
设置。group
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>
在来宾系统中,共享安装如下:
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
问题是来宾中的 root 用户无法写入主机上非 root 用户拥有的文件/文件夹。更奇怪的是,来宾的 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
和squash
) — 没有区别。
我只是想知道是否可以调整任何东西来使其工作,或者它只是一个错误?
请注意,这里报告了类似的问题:使用 libvirt/qemu 对直通(9p)文件系统进行读/写访问?但与那种情况不同的是,对于 root 拥有的文件,我有 100% 的写访问权限,只有非 root 用户文件,即使在客户机上以 root 身份也无法写入。
答案1
我遇到过类似的问题并且从未让它与 9p 一起工作,并且正如其他评论者所说 9p 还不成熟。
我最终使用 samba 来挂载主机文件系统,它工作得很好。其他任何网络文件系统可能也能完成这项工作(例如 NFS,这是 Red Hat 推荐的;请参阅 @Diagon 评论中的链接)https://access.redhat.com/discussions/1119043)。
答案2
您能检查文件系统的附加属性,例如共享目录上的 acl 吗?我怀疑是权限问题。
答案3
在我的情况下,kvm 环境在用户 libvirt 下运行。(默认)然后,如果 /mnt/storage/data 由主机上的 libvirt-qemu.kvm 拥有,并且已部署 chmod 0777 /mnt/storage/data,则它对我有用。我可以作为普通用户在客户机中创建一个目录(例如 /mnt/storage/data/test/),并且 root 可以执行您要求的所有任务。(此外,每个用户都是客户机,可以删除甚至由 root 拥有的每个文件。我通过在主机上将权限从 777 更改为 775 来解决这个问题。如果客户机中的用户属于该组,他可以做任何事情,如果不是,他只有读取权限...)