欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

KVM虚拟机磁盘加密

程序员文章站 2022-05-10 16:17:43
...

最近在找虚拟机磁盘加密的资料,发现网上资料还是比较少,在这里汇总一下。
之前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.
...

1.创建新的luks虚拟磁盘(若选择1则跳过2)

  1. 创建luks格式磁盘,data为要设置的磁盘密码。luks好像不支持空洞模式,申请的空间大小会完全预分配。(如有错误,欢迎指正。)
$ qemu-img create -f luks --object secret,data=123456,id=sec0 -o key-secret=sec0 demo.luks 10G

2.从已有qcow2磁盘镜像转换(若选择2则忽略1)

  1. 有一个qcow2的镜像,且是shutdown状态
  2. 新建一个luks镜像,并且与上述qcow2相等大小
$ qemu-img create -f luks --object secret,data=123456,id=sec0 \
-o key-secret=sec0 demo.luks 10G
  1. 将qcow2转换为luks
$ 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

3.在本地创建一个秘钥xml secret.xml

此处uuid可以通过qemu-img info demo.luks查看
KVM虚拟机磁盘加密
修改uuid

<secret ephemeral='no' private='yes'>
    <uuid>fbae4c81-0d6c-4ed1-9e73-581eb8b7131f</uuid>
</secret>

4. 定义**文件

$ virsh secret-define secret.xml 
Secret fbae4c81-0d6c-4ed1-9e73-581eb8b7131f created

5. 给secret设置密码值

(这里的密码就是给磁盘加密时使用的密码123456)

$ virsh secret-set-value 7d195d98-6a06-4bb9-a0e9-6a2fde302f31 $MYSECRET

注:密值是base64的(MYSECRET=printf %s "123456" | base64
注:产生的secret以及密码在/etc/libvirt/secrets/中存在

6. 复制虚拟机xml文件,在disk段中加入secret

默认kvm虚拟机配置文件目录/etc/libvirt/qemu/
KVM虚拟机磁盘加密
如果是从cdrom引导项就启用加密,则需要修改boot引导设备
KVM虚拟机磁盘加密

7. 定义、启动虚拟机

启动虚拟机。虚拟启动后就是使用的加密的磁盘

$ virsh define file.xml
$ virsh start domain

附:通过qemu-system-x86_64启动虚拟机

  1. 通过qemu-system-x86_64可以创建qcow2格式的磁盘,并采用luks加密
$ qemu-img create --object secret,id=sec0,data=123456 -f qcow2 \
-o encrypt.format=luks,encrypt.key-secret=sec0 base.qcow2 10G
  1. 通过qemu-system-x86_64安装虚拟机,可通过vnc安装。
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

相关标签: kvm