每次我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 shutdown
和virsh 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 的情况下解决问题?
设置
security_driver = "none"
不会禁用内核中的 apparmor,libvirt
它本身只是一些支持查看当前稳定版(debian 9/stretch)和当前不稳定版的 apparmor 配置文件,我发现了一些差异。
我相信您可以在其中添加以下规则
/etc/apparmor.d/local/usr.sbin.libvirtd
(这是两个版本之间的众多差异之一):然后重启apparmor服务
service restart apparmor
不过,可能需要其他规则才能使一切正常。
另一种解决方案是将配置文件设置为“投诉”模式
aa-complain /usr/sbin/libvirtd
,这将防止 apparmor 拒绝任何事情,但您会记录问题。您可以稍后使用
aa-logprof
来生成缺少的规则(在仔细检查它们之后)或尝试从不稳定的获取 apparmor 配置文件。