KVM:無法銷毀 VM(權限被拒絕) - 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 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
(這是兩個版本之間的眾多差異之一):ptrace (trace) peer=unconfined,
然後重啟apparmor服務
service restart apparmor
不過,可能需要其他規則才能使一切正常。
另一種解決方案是將配置文件設置為“投訴”模式
aa-complain /usr/sbin/libvirtd
,這將防止 apparmor 拒絕任何事情,但您會記錄問題。您可以稍後使用
aa-logprof
來生成缺少的規則(在仔細檢查它們之後)或嘗試從不穩定的獲取 apparmor 配置文件。