KVM:无法销毁虚拟机(权限被拒绝)-AppArmor 阻止 Libvirt

KVM:无法销毁虚拟机(权限被拒绝)-AppArmor 阻止 Libvirt

每次我virsh destroy ${KVM}以 root 身份运行时,都会出现以下错误(virsh shutdown ${KVM}完全没有反应,什么也没有发生):

error: Failed to destroy domain ${KVM}
error: Failed to terminate process 11956 with SIGTERM: Permission denied

当我shutdown -h now在 KVM 内运行时,它会永远挂起,直到我终止 qemu-system-x86_64 进程 ( kill ${PID_OF_QEMU_PROCESS})。如系统日志中所述,apparmor 正在阻止调用( forvirsh shutdownvirsh destroy):

apparmor="DENIED" operation="ptrace" profile="/usr/sbin/libvirtd" pid=23212
    comm="libvirtd" requested_mask="trace" denied_mask="trace" peer="unconfined"

在 qemu 配置文件中,/etc/libvirt/qemu.conf我尝试禁用 Apparmor ( security_driver = "none"),但仍然遇到相同的错误。

一些细节: OS = Debian 9、 Kernel = 4.14.0-0.bpo.2-amd64、 libvirt-version = 3.0.0-4

有谁知道如何在不禁用 apparmor 的情况下解决问题?

答案1

设置security_driver = "none"不会禁用内核中的apparmor,只是libvirt本身的一些支持

看看当前稳定版(debian 9/stretch)中的 apparmor 配置文件和当前不稳定版中的 apparmor 配置文件,我发现了一些差异。

我相信您可以添加以下规则/etc/apparmor.d/local/usr.sbin.libvirtd(这是两个版本之间的众多差异之一):

ptrace (trace) peer=unconfined,

然后重新启动 apparmor 服务service restart apparmor

不过,可能需要其他规则才能使一切正常进行。

另一种解决方案是将配置文件设置为“投诉”模式aa-complain /usr/sbin/libvirtd,这将防止 apparmor 拒绝任何内容,但您会保留问题记录。

您稍后可以使用它aa-logprof来生成缺少的规则(之后仔细审查他们)或尝试从不稳定的地方获取apparmor配置文件。

相关内容