Шифрование дискового образа QEMU


Поигравшись немного в виртуалки под QEMU, задался вопросо шифрования образа с виртуальной машиной.

Маны говорят, что qemu умеет шифровать образы только в формате qcow и qcow2

Only the formats "qcow" and "qcow2" support encryption or compression. The compression is read-only. It means that if a compressed sector is rewritten, then it is rewritten as uncompressed data.

Encryption uses the AES format which is very secure (128 bit keys). Use a long password (16 characters) to get maximum protection.

У меня изначально образ был в формате raw. Соответственно нужно сконвертировать

#qemu-img convert -f raw -O qcow2 -o encryption qemu_vm.raw qemu_vm.qcow2
Disk image 'qemu_vm.qcow2' is encrypted.
password:

После ввода пароля, изначальный образ конвертируется в шифрованный.

Следующая задача - запустить виртуальную машину.

Т.к. мне требуется чтобы виртуалка уходила в бекграунд, то нужно придумать как скормить ей пароль. Для этого монитор перенапрявляем на сокет с помощью ключа -monitor unix:/tmp/qemu.vm

Запускаем QEMU c виртуалкой.

#/usr/local/bin/qemu -hda vm.qemu -m 256 -vnc 192.168.0.1 -net nic,model=pcnet,macaddr=52:54:00:12:34:01 -net tap,ifname=tap1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -pidfile /var/run/vm.pid -daemonize -kernel-kqemu -name vm -monitor unix:/tmp/qemu.vm,server,nowait -localtime

Далее стартуем виртуалку и вводим пароль на диск.

# /usr/bin/nc -U /tmp/qemu.vm
QEMU 0.11.1 monitor - type 'help' for more information
(qemu) cont
cont
ide0-hd0 (vm.qemu) is encrypted.
Password: 123123
******
(qemu) ^C
 

Если ввели неправильный ключ, то получаем такую картинку

Ошибка диска из-за неправильного пароля в qemu

Если пароль правильный, то виртуалка нормально загрузится.

При желании, дальше можно развивать идею по разному. Например, можно ключ хранить на каком-нить сервере в нете и его заставлять в нужный момент подключаться и отдавать ключ или самому забирать ключ с сервера и скармливать виртуалке в случае необходимости.