Kvm

KVM:無法銷毀 VM(權限被拒絕) - AppArmor 阻止 Libvirt

  • January 11, 2018

每次我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 的情況下解決問題?

設置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 配置文件。

引用自:https://unix.stackexchange.com/questions/416345