Назад | Перейти на главную страницу

зашифрованные виртуальные машины qemu не запускаются после обновления до buster: в разрешении отказано

Я запускаю зашифрованную виртуальную машину qemu на хосте debian с libvirt.

Чтобы настроить машину, я сделал следующие шаги:

  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. Настройте виртуальную машину по мере необходимости
  4. Импортируйте виртуальную машину в 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 stretch в хост-системе

После обновления до debian buster виртуальная машина не запускается со следующими

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, что нововведение в buster, предотвращает доступ к /etc/libvirt/secret/

Однако проблема не исчезнет, ​​если я настрою apparmor на режим жалобы, который, как я понимаю, должен прекратить блокировать доступ к секретному файлу:

aa-complain /usr/sbin/libvirtd

-- редактировать --

Что касается комментария о правах доступа, я думаю, что они выставлены правильно. До обновления работало нормально. Изменился ли пользователь, запускающий qemu-vm, с ugprade на buster?

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

Благодаря Гвидо из проекта debian я смог решить проблему.

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 установить правильные права доступа.