KVM:仮想マシンを破壊できない(許可を拒否) - AppArmorがLibvirtをブロックする

KVM:仮想マシンを破壊できない(許可を拒否) - AppArmorがLibvirtをブロックする

rootとして実行するたびに、virsh destroy ${KVM}次のエラーが発生します(virsh shutdown ${KVM}完全に応答せず、何も起こりません)。

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

KVM内で実行すると、shutdown -h nowqemu-system-x86_64プロセス(kill ${PID_OF_QEMU_PROCESS})が終了するまで永久に停止します。システムログに記載されているように、apparmorは呼び出しをブロックしています(virsh 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.confApparmor()を無効にしようとしましたが、security_driver = "none"まだ同じエラーが発生しました。

いくつかの詳細:OS = Debian 9、Kernel = 4.14.0-0.bpo.2-amd64、libvirt-version = 3.0.0-4

衣類を無効にせずに問題を解決する方法を知っている人はいますか?

答え1

この設定は、security_driver = "none"カーネルで衣類を無効にすることなくlibvirt一部自体でサポートされています。

現在の安定版(debian 9 / stretch)の衣類構成ファイルと現在の不安定バージョンの衣類構成ファイルを調べて、いくつかの違いを見つけました。

次のルールを追加できると思います/etc/apparmor.d/local/usr.sbin.libvirtd(これは2つのバージョン間の多くの違いの1つです)。

ptrace (trace) peer=unconfined,

その後、衣類サービスを再起動してください。service restart apparmor

ただし、すべてが正常に機能するには追加のルールが必要な場合があります。

別の解決策は、プロファイルを「苦情」モードに設定することです。aa-complain /usr/sbin/libvirtdこれにより、衣類は何も拒否できなくなりますが、問題の記録は維持されます。

後でこれを使用して、aa-logprof不足しているルールを生成できます。慎重に該当)または不安定な場所から衣類設定ファイルをインポートしてください。

関連情報