kvmqcow2磁盘加密浅谈luks加密LUKS为各种工具实现了一种平台无关的标准磁盘格式。LUKS用于加密块设备。加密设备的内容是任意的,所以任何文件系统都可以加密,包括交换分区。加密卷的开头有一个未加密的标头,它允许存储最多8(LUKS1)或32(LUKS2)个加密密钥和加密参数,例如密码类型和密钥大小。这个标头的存在是LUKS和普通dm-crypt之间的主要区别,因为标头允许多个不同的密码短语以及轻松更改和删除它们的能力。但是,如果标头丢失或损坏,设备将无法再解密。LUKS(LinuxUnifiedKeySetup)提供了一种标准的磁盘加密格式,不仅兼容性高,可以在不同的Linux发行版中使用,还支持多用户/密码,而且由于其加密密钥与密码无关,所以即使如果密码丢失了,我们不需要重新加密整个硬盘,只需要及时修改密码就可以重获安全。luks加密kvm虚拟机磁盘在libvirt4.5版本之前的实现,除了luks加密外,还支持qcow加密。qcow磁盘加密。qemu-imgconvert-Oqcow2--objectsecret,id=sec0,data=123456-oencryption=on,encrypt.key-secret=sec0-fqcow2test.qcow2fw-encry.qcow2加密格式默认,qcow可能没有然后使用它来创建加密卷。QEMU中使用qcow加密卷在QEMU2.3中开始被淘汰。下面主要介绍如何使用luks实现磁盘加密。将现有虚拟机磁盘转换为加密磁盘。如果直接使用加密磁盘创建新的虚拟机,则不需要执行第二步转换磁盘。创建一个大小为20G的luks空盘。qemu-imgcreate-fluks--objectsecret,data=123,id=sec0-okey-secret=sec0fw.luks20G将要加密的qcow2磁盘转换为luks磁盘。如果目标磁盘不存在,则无法转换。qemu-img转换--target-image-opts\>--objectsecret,data=123,id=sec0-fqcow2fw.qcow2-n\>driver=luks,file.filename=fw.luks,key-secret=sec0创建一个secretxml文件,不加UUID会自动生成。vimvolume-secret.xml92f35b9e-c845-47e1-b5a6-f2036a706866我的第一只小狗的超级秘密名字/home/kvm/images/fw.luks定义秘密。生成的secret和base64密码存在于/etc/libvirt/secrets/中。virshsecret-definevolume-secret.xml设置secret的密码值。#MYSECRET=`printf%s"123"|base64`#virshsecret-set-valuedc057b2b-6a7d-4dba-b76e-37a458448765$MYSECRETSecretvalueset编辑虚拟机的磁盘部分以添加秘密字段。对于卷创建,您可以指定用于加密luks卷的加密算法。为此可以提供以下两个可选元素cipher和ivgen。支持哪些算法取决于管理程序。使用qemu-img创建卷时,存储驱动后端使用的默认算法是'aes-256-cbc','essiv'用于生成初始化向量,'sha256'哈希算法用于生成密码和初始化向量。官网示例仅供参考。twofish.luks5/var/lib/libvirt/images/demo.luks<格式type='raw'/>然后启动虚拟机。virshstartvm如果想将加密后的磁盘复制到其他主机,创建secret后直接执行上述操作即可。注意:设置的密码必须与之前主机定义的密码相同。如果我们去掉虚拟机加密启动盘的加密域,不在虚拟化层解密,会发生什么?将找不到磁盘引导。如果数据盘没有在虚拟化层解密,则无法挂载直接地。加密后不能直接挂载。即使加密后硬盘丢失,也不用担心数据被盗。加密后必须在挂载前进行映射。LUKS也是一种基于设备映射器(dm)机制的加密方案。如果要使用加密分区,必须将加密分区映射到/dev/mapper目录。映射完成后,我们只能挂载映射使用,同时我们在做映射时还需要输入加密分区的加密密码。我们使用Cryptsetup工具来映射数据盘,映射文件会放在/dev/mapper目录下。需要先前磁盘加密的密码。cryptsetupluksOpen/dev/vdbfwkvm使用cephrbd磁盘加密定义secret生成secret。所有ceph节点都必须执行才能生成secret。cd/etc/libvirt/qemucat>secret.xml<client.libvirtsecretEOF定义secret,生成的id号要记下来。root@node1:/etc/libvirt/qemu#virshsecret-define--filesecret.xmlSecret01a0ba00-f277-48bb-b937-9001ec91f53ecreatedroot@node2:/etc/libvirt/qemu#virshsecret-define--filesecret.xmlSecret533b5d06-0525-4da3-bddf-907f70c0a31bcreatedroot@node3:/etc/libvirt/qemu#virshsecret-define--filesecret.xmlSecret1740698e-abb9-4502-b801-1ede074f1ce1创建获取客户端secret.libvirt的密钥字符串被保存到文件中。这三个都执行以下命令。cephauth获取密钥client.libvirt|teeclient.libvirt.key设置密码。root@node1:/etc/libvirt/qemu#virshsecret-set-value--secret01a0ba00-f277-48bb-b937-9001ec91f53e--base64$(catclient.libvirt.key)秘密值setroot@node2:/etc/libvirt/qemu#virshsecret-set-value--secret533b5d06-0525-4da3-bddf-907f70c0a31b--base64$(catclient.libvirt.key)秘密值setroot@node3:/etc/libvirt/qemu#virshsecret-set-value--secret1740698e-abb9-4502-b801-1ede074f1ce1--base64$(catclient.libvirt.key)秘密值设置编辑虚拟机配置文件。/usr/bin/kvm-spice启动虚拟机定义,启动虚拟机机器。virsh定义vm.xmlvirsh启动vm