最近在找虚拟机磁盘加密的资料,发现网上资料还是比较少,在这里汇总一下。
之前qcow2格式的磁盘默认加密方式似乎已经不再支持,官方推荐luks或dm-crypt加密。
$ man qemu-img
...
Use of qcow / qcow2 encryption is thus strongly discouraged.
Users are recommended to use an alternative encryption
technology such as the Linux dm-crypt / LUKS system.
...
$ qemu-img create -f luks --object secret,data=123456,id=sec0 -o key-secret=sec0 demo.luks 10G
$ qemu-img create -f luks --object secret,data=123456,id=sec0 \
-o key-secret=sec0 demo.luks 10G
$ qemu-img convert --target-image-opts --object secret,data=123456,id=sec0 \
-f qcow2 demo.qcow2 -n driver=luks,file.filename=demo.luks,key-secret=sec0
此处uuid可以通过qemu-img info demo.luks
查看
修改uuid
<secret ephemeral='no' private='yes'>
<uuid>fbae4c81-0d6c-4ed1-9e73-581eb8b7131f</uuid>
</secret>
$ virsh secret-define secret.xml
Secret fbae4c81-0d6c-4ed1-9e73-581eb8b7131f created
(这里的密码就是给磁盘加密时使用的密码123456)
$ virsh secret-set-value 7d195d98-6a06-4bb9-a0e9-6a2fde302f31 $MYSECRET
注:密值是base64的(MYSECRET=printf %s "123456" | base64
)
注:产生的secret以及密码在/etc/libvirt/secrets/中存在
默认kvm虚拟机配置文件目录/etc/libvirt/qemu/
如果是从cdrom引导项就启用加密,则需要修改boot引导设备
启动虚拟机。虚拟启动后就是使用的加密的磁盘
$ virsh define file.xml
$ virsh start domain
$ qemu-img create --object secret,id=sec0,data=123456 -f qcow2 \
-o encrypt.format=luks,encrypt.key-secret=sec0 base.qcow2 10G
qemu-system-x86_64 --object secret,id=sec0,data=123456 \
-drive driver=qcow2,file.filename=base.qcow2,encrypt.key-secret=sec0 \
-cdrom ./iso/ubuntu-16.04.6-desktop-amd64.iso \
-boot d -m 1024 -enable-kvm -vnc :1
此处应有通过virt-install
安装加密磁盘的虚拟机的命令,博主暂时没有找到可用的命令,如果有可用的virt-install安装方案,欢迎留言!!!
https://cloud.tencent.com/developer/article/1162145
https://libvirt.org/formatstorageencryption.html#StorageEncryption
http://blog.leanote.com/post/7wlnk13/%E5%88%9B%E5%BB%BAKVM%E8%99%9A%E6%8B%9F%E6%9C%BA
https://bugzilla.redhat.com/show_bug.cgi?id=1406803
https://bugzilla.redhat.com/show_bug.cgi?id=1575578