自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇學會 Kvm 虛擬機磁盤使用 Luks 加密

開發(fā) 前端
如果標頭丟失或損壞,設備將不再可解密。LUKS (Linux Unified Key Setup)為提供了一個標準的磁盤加密格式,使得它不僅兼容性高,能通用于不同的 Linux 發(fā)行版本,還支持多用戶/口令,并且由于它的加密密鑰獨立于口令,所以即使口令失密,我們也無需重新加密整個硬盤,只需要及時的改變口令即可重獲安全。

kvm qcow2磁盤加密

關于luks加密

LUKS 實現(xiàn)了一種獨立于平臺的標準磁盤格式,用于各種工具。LUKS 用于加密塊設備。加密設備的內(nèi)容是任意的,因此可以加密任何文件系統(tǒng),包括交換分區(qū)。加密卷的開頭有一個未加密的標頭,它允許存儲多達 8 個 (LUKS1) 或 32 個 (LUKS2)加密密鑰以及密碼類型和密鑰大小等加密參數(shù)。此標頭的存在是 LUKS 和普通 dm-crypt 之間的主要區(qū)別,因為標頭允許使用多個不同的密碼短語,并且能夠輕松更改和刪除它們。但是,如果標頭丟失或損壞,設備將不再可解密。LUKS (Linux Unified Key Setup)為提供了一個標準的磁盤加密格式,使得它不僅兼容性高,能通用于不同的 Linux 發(fā)行版本,還支持多用戶/口令,并且由于它的加密密鑰獨立于口令,所以即使口令失密,我們也無需重新加密整個硬盤,只需要及時的改變口令即可重獲安全。

luks加密kvm虛擬機磁盤的實現(xiàn)

在libvirt 4.5版本之前,除了luks加密之外,還支持qcow加密的。qcow磁盤加密。

qemu-img convert -O qcow2 --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 -f qcow2 test.qcow2 fw-encry.qcow2

加密格式default和qcow可能不再用于創(chuàng)建加密卷。在 QEMU 中使用 qcow 加密卷在 QEMU 2.3 中開始逐步淘汰。

圖片

下面還是主要來介紹怎么使用luks來實現(xiàn)磁盤加密吧 將現(xiàn)有的虛擬機磁盤轉為加密的磁盤,如果直接創(chuàng)建加密磁盤的新虛擬機不需要執(zhí)行第二步轉換磁盤的操作。

  • 創(chuàng)建大小為20G的luks空磁盤。
qemu-img create -f luks --object secret,data=123,id=sec0      -o key-secret=sec0 fw.luks  20G
  • 將要加密的qcow2磁盤轉換為luks磁盤,目標磁盤不存在將無法轉換。
qemu-img convert --target-image-opts \
> --object secret,data=123,id=sec0 -f qcow2 fw.qcow2 -n \
> driver=luks,file.filename=fw.luks,key-secret=sec0

圖片

  • 創(chuàng)建一個secret xml文件,不添加UUID會自動生成。
vim volume-secret.xml
<secret ephemeral='no' private='yes'>
<uuid>92f35b9e-c845-47e1-b5a6-f2036a706866</uuid>
<description>Super secret name of my first puppy</description>
<usage type='volume'>
<volume>/home/kvm/images/fw.luks</volume>
</usage>
</secret>
  • 定義secret

產(chǎn)生的secret以及base64的密碼在/etc/libvirt/secrets/中存在。

virsh secret-define volume-secret.xml


  • 給secret設置密碼值。
# MYSECRET=`printf %s "123" | base64`
# virsh secret-set-value dc057b2b-6a7d-4dba-b76e-37a458448765 $MYSECRET
Secret value set
  • 編輯虛擬機disk段加入secret的字段。
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/kvm/images/fw.luks'/>
<target dev='vda' bus='virtio'/>
<encryption format='luks'>
<secret type='passphrase' uuid='dc057b2b-6a7d-4dba-b76e-37a458448765'/>
</encryption>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>

對于卷創(chuàng)建,可以指定用于加密 luks 卷的加密算法??梢詾榇四康奶峁┮韵聝蓚€可選元素cipher和ivgen。支持哪些算法取決于管理程序。使用 qemu-img 創(chuàng)建卷時,存儲驅動后端使用的默認算法是 'aes-256-cbc',使用 'essiv' 生成初始化向量,使用 'sha256' 哈希算法生成密碼和初始化向量。官網(wǎng)例子,只做參考。

<volume>
<name>twofish.luks</name>
<capacity unit='G'>5</capacity>
<target>
<path>/var/lib/libvirt/images/demo.luks</path>
<format type='raw'/>
<encryption format='luks'>
<secret type='passphrase' uuid='f52a81b2-424e-490c-823d-6bd4235bc572'/>
<cipher name='twofish' size='256' mode='cbc' hash='sha256'/>
<ivgen name='plain64' hash='sha256'/>
</encryption>
</target>
</volume>

之后啟動虛擬機就可以了。

virsh start vm

如果想把加密的磁盤拷貝到其他宿主機上使用,直接執(zhí)行上面的創(chuàng)建secret之后的操作就可以了。

注意:設置的密碼一定要與之前宿主機定義的密碼一樣。

如果我們把虛擬機加密引導磁盤的encryption字段去掉,不在虛擬化層進行解密,會怎么樣呢,會找不到磁盤引導。

<encryption format='luks'>
<secret type='passphrase' uuid='dc057b2b-6a7d-4dba-b76e-37a458448765'/>
</encryption>

圖片

如果數(shù)據(jù)盤不在虛擬化層解密,將不能直接掛載。

圖片

  • 加密后不能直接掛載
  • 加密后硬盤丟失也不用擔心數(shù)據(jù)被盜
  • 加密后必須做映射才能掛載

LUKS 也是一種基于 device mapper(dm) 機制的加密方案。如果要使用加密后的分區(qū),就必須對加密后的分區(qū)做一個映射,映射到 /dev/mapper 這個目錄下。映射完成之后,我們也只能掛載這個映射來進行使用,并且在做映射的時候還需要輸入加密分區(qū)的加密密碼。我們使用Cryptsetup工具對數(shù)據(jù)盤做映射,映射文件將放到 /dev/mapper 目錄中。需要輸入之前磁盤加密的密碼。

cryptsetup luksOpen /dev/vdb fw

圖片

kvm使用ceph rbd磁盤加密

定義secret

  • 生成secret

所有ceph節(jié)點都要執(zhí)行 生成secret。

cd /etc/libvirt/qemu
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.libvirt secret</name>
</usage>
</secret>
EOF
  • 定義secret,生成的id號要記下來。
root@node1:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 01a0ba00-f277-48bb-b937-9001ec91f53e created
root@node2:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 533b5d06-0525-4da3-bddf-907f70c0a31b created
root@node3:/etc/libvirt/qemu# virsh secret-define --file secret.xml
Secret 1740698e-abb9-4502-b801-1ede074f1ce1 created
  • 獲取client.libvirt密鑰并將密鑰字符串保存到文件中。

三臺都執(zhí)行下面的命令。

ceph auth get-key client.libvirt | tee client.libvirt.key
  • 設置secret的密碼。
root@node1:/etc/libvirt/qemu# virsh secret-set-value --secret  01a0ba00-f277-48bb-b937-9001ec91f53e --base64 $(cat client.libvirt.key) 
Secret value set
root@node2:/etc/libvirt/qemu# virsh secret-set-value --secret 533b5d06-0525-4da3-bddf-907f70c0a31b --base64 $(cat client.libvirt.key)
Secret value set
root@node3:/etc/libvirt/qemu# virsh secret-set-value --secret 1740698e-abb9-4502-b801-1ede074f1ce1 --base64 $(cat client.libvirt.key)
Secret value set
  • 編輯虛擬機配置文件。
<devices>
<emulator>/usr/bin/kvm-spice</emulator>
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
<auth username='libvirt'>
<secret type='ceph' uuid='01a0ba00-f277-48bb-b937-9001ec91f53e'/>
</auth>
<source protocol='rbd' name='libvirt-pool/fw-system'>
<host name='node1' port='6789'/>
<host name='node2' port='6789'/>
<host name='node3' port='6789'/>
</source>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>

啟動虛擬機

定義并啟動虛擬機

virsh define vm.xml
virsh start vm

責任編輯:武曉燕 來源: 運維開發(fā)故事
相關推薦

2022-05-27 14:06:43

kvm虛擬機磁盤LUKS

2022-01-02 08:43:46

Python

2022-06-02 07:11:13

JVMJava

2020-06-18 16:39:10

KVM虛擬化虛擬機

2021-09-29 09:00:19

Linux虛擬機CentOS

2021-12-28 07:20:43

Hippo WebAssembly云原生

2022-01-12 07:36:01

Java數(shù)據(jù)ByteBuffer

2022-02-07 11:01:23

ZooKeeper

2014-02-21 11:20:34

KVMXen虛擬機

2022-03-01 08:31:37

volatile變量編譯器

2023-11-29 13:59:00

trait定義接口

2022-01-01 20:02:25

Metadata動態(tài)元數(shù)據(jù)

2021-10-15 09:55:48

Myloader數(shù)據(jù)教程

2023-01-03 08:31:54

Spring讀取器配置

2021-05-11 08:54:59

建造者模式設計

2021-07-05 22:11:38

MySQL體系架構

2021-07-06 08:59:18

抽象工廠模式

2022-08-26 09:29:01

Kubernetes策略Master

2023-11-28 08:29:31

Rust內(nèi)存布局

2021-07-02 09:45:29

MySQL InnoDB數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號