web-dev-qa-db-ja.com

バスターへのアップグレード後に暗号化されたqemu仮想マシンが起動しない:許可が拒否されました

Libvirtを使用してDebianホストで暗号化されたqemu仮想マシンを実行しています。

マシンをセットアップするために、私は次の手順を実行しました。

  1. 暗号化キーを$secretfileに配置されたファイル/etc/libvirt/secretに配置します
  2. イメージを作成します:qemu-img create --object secret,id=sec0,file=$secretfile,format=raw -f qcow2 -o encrypt.format=luks,encrypt.key-secret=sec0 $vmfile $size
  3. 必要に応じてVM
  4. VMをvirtにインポートします:virt-install -n $theName -r 2048 --os-type=linux --os-variant=debian9 --connect=qemu:///system --import --network=network:default --vnc --qemu-commandline="--object secret,id=sec0,file=$secretfile -drive driver=qcow2,file.filename=$vmfile,encrypt.key-secret=sec0" --disk none --cpu Host --import

これは、ホストシステムのDebianストレッチで正常に機能しました

Debianバスターにアップグレードした後、VMは次のように開始できません

error: Failed to start domain Feigenbaum
error: internal error: process exited while connecting to monitor: 2019-07-08T11:32:00.290494Z qemu-system-x86_64: --object secret,id=sec0,file=/etc/libvirt/secret/Feigenbaum.secret: Unable to read /etc/libvirt/secret/Feigenbaum.secret: Failed to open file “/etc/libvirt/secret/Feigenbaum.secret”: Permission denied

私の最初の推測は、バスターの新機能であるapparmorが、/etc/libvirt/secret/へのアクセスを妨げているということです。

ただし、apparmorをcomplainモードに設定すると、問題は解決しません。私の理解では、シークレットファイルへのアクセスのブロックを停止する必要があります。

aa-complain /usr/sbin/libvirtd
  • 私はapparmorにかなり慣れていません:apparmorが干渉していないことを確認するにはどうすればよいですか?
  • シークレットファイルへのアクセスを妨げる可能性のある他のメカニズムは何ですか?

-編集-

アクセス権についてのコメントについては、正しく設定されていると思います。アップグレード前は正常に機能していました。 qemu-vmを実行しているユーザーは、ugpradeでバスターに変更されましたか?

ls -l /etc/libvirt/secret/Feigenbaum.secret 
-rw-r----- 1 root libvirt-qemu 61 Mar  8 14:13 /etc/libvirt/secret/Feigenbaum.secret

ls -ld /etc/libvirt/secret/
drwxrwx--- 2 libvirt-qemu libvirt-qemu 102 Mar  8 14:13 /etc/libvirt/secret/

ls -ld /etc/libvirt/
drwxr-xr-x 7 root root 4096 Jul  8 11:51 /etc/libvirt/

ls -ld /etc/
drwxr-xr-x 103 root root 8192 Jul 10 06:35 /etc/

-編集-

Debianのバグとして報告: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=933385

1
DoRe

DebianプロジェクトのGuidoのおかげで、私は問題を解決することができました。

Apparmorはシークレットファイルへのアクセスをブロックします。

Qemu-commandlineオプションはサポートされておらず、apparmorがアクセス権を正しく設定することを不可能にします。これは、/etc/apparmor.d/libvirt/TEMPLATE.qemuで手動で構成できます。ファイルを変更する必要があります

#
# This profile is for the domain whose UUID matches this file.
#

#include <tunables/global>

profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
  #include <abstractions/libvirt-qemu>
}

#
# This profile is for the domain whose UUID matches this file.
#

#include <tunables/global>

profile LIBVIRT_TEMPLATE flags=(attach_disconnected) {
  #include <abstractions/libvirt-qemu>
  /etc/libvirt/secret/** r,
  /var/lib/libvirt/images/** rwk,
}

より良い解決策は、文書化されているようにlibvirtを介してボリューム暗号化を使用することです: https://libvirt.org/formatstorageencryption.html#StorageEncryption 。これにより、apparmorが正しいアクセス権を設定できるようになります。

1
DoRe