我正在使用 libvirt 的 debian 主机上运行加密的 qemu 虚拟机。
为了设置机器,我采取了以下步骤:
- 将加密密钥放在一个文件
$secretfile
中/etc/libvirt/secret
- 创建图像:
qemu-img create --object secret,id=sec0,file=$secretfile,format=raw -f qcow2 -o encrypt.format=luks,encrypt.key-secret=sec0 $vmfile $size
- 根据需要设置 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 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
- 我对 apparmor 很陌生:我如何确保 apparmor 不会干扰?
- 还有哪些其他机制可以阻止对机密文件的访问?
- 编辑 -
关于访问权限的评论,我认为它们设置正确。在升级之前它运行良好。运行 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 项目的 Guido,我能够解决这个问题。
Apparmor 确实阻止了对秘密文件的访问。
不支持 qemu-commandline 选项,这使得 apparmor 无法正确设置访问权限。这可以在 中手动配置
/etc/apparmor.d/libvirt/TEMPLATE.qemu
。该文件需要从至
更好的解决方案是通过 libvirt 使用卷加密,如下所述:https ://libvirt.org/formatstorageencryption.html#StorageEncryption 。这应该允许 apparmor 设置正确的访问权限。