当 QEMU 访问外部硬盘上的虚拟机时,Libvirt 会拒绝权限

当 QEMU 访问外部硬盘上的虚拟机时,Libvirt 会拒绝权限

我想使用外部硬盘作为我的虚拟机的 libvirt 存储池。

我在中定义了一个新池/media/wenzel/OSWatcher/vms,并win10-ts1-1507.qcow2在那里导入了我的虚拟机。

但是,当使用 virsh 启动虚拟机时,出现权限被拒绝的情况:


virsh # start win10-ts1-1507
error: Failed to start domain win10-ts1-1507
error: Cannot access storage file '/media/wenzel/OSWatcher/vms/win10-ts1-1507.qcow2' (as uid:64055, gid:108): Permission non accordée

virsh #
  • 用户标识64055libvirt-qemu
  • 组标识108kvm

我做了一些测试,结果表明,如果当前工作目录位于硬盘挂载路径之外(在 之外/media/wenzel/OSWatcher),QEMU 将无法访问 qcow:

https://drive.google.com/file/d/10RFrE_YZ6YpZnB7FWmIwF11SwH-QxNe7/view?usp=sharing

此外,我已经允许用户在 ACL 中libvirt-qemu访问,并递归访问虚拟机映像(正如建议的那样/media/OSWatcher这里

$ sudo getfacl win10-ts1-1507.qcow2
# file: win10-ts1-1507.qcow2
# owner: libvirt-qemu
# group: wenzel
user::rwx
user:libvirt-qemu:rwx
group::rwx
mask::rwx
other::rwx

因此我不知道这个权限被拒绝错误的根本原因是什么。

我愿意接受深入研究这个问题的建议。

谢谢 !

注意:在 Ubuntu 20.04 上运行

答案1

检查您是否正在使用 SELinux:

# getenforce
Enforcing

然后,如果您愿意,请为 USB 设置 SELinux 布尔值:

# getsebool -a
...
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
virt_use_glusterd --> off
virt_use_nfs --> off
virt_use_rawip --> off
virt_use_samba --> off
virt_use_sanlock --> off
virt_use_usb --> off
virt_use_xserver --> off
...

如果您确实使用 SELinux,请尝试将 virt_use_usb 布尔值设置为开启:

# setsebool -P virt_use_usb 1

那应该可行。

相关内容