Шифрование Linux-сервера для удаленного доступа к ВМ

Случай использования

У меня есть сервер с Ubuntu, завернутый в виртуальную машину (файл vmdk), которая содержит веб-приложение. Я хочу отправить эту ВМ кому-то и запретить ему доступ к внутренней файловой системе ВМ - я не хочу, чтобы он извлекал файловую систему компьютера из файла vmdk.

Пользователь может просто запустить машину или выключить ее (когда машина запускается - она ​​автоматически загружает серверные сервисы приложения).

Решения?

Я хотя и об использовании шифрования жесткого диска (Full Disk Encryption с использованием LUKS или других решений, таких как VeraCrypt), но моя главная проблема заключается в том, как оно будет использоваться в серверной среде.

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

Есть ли способ расшифровать машину, используя удаленный вход в систему? (Меня меньше волнуют более сложные проблемы, такие как атаки по побочным каналам или Hot VM Cloning). Или любое другое решение, которое может удовлетворить вариант использования?

Обновить

После ответа @vidarlo я решил пойти с решением FDE, понимая компромисс.

Ниже приведены инструкции по настройке (предположим, что /boot находится в незашифрованном разделе / ​​dev/sda1, а зашифрованный - в разделе / ​​dev/sdaX).

Создайте новый случайный пароль и сохраните его в хранилище ключей luks:

sudo dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4
sudo chmod 0400 /boot/keyfile
sudo cryptsetup luksAddKey /dev/sdaX /boot/keyfile

Получите UUID раздела /dev/sda1, выполнив:

sudo ls -l /dev/disk/by-uuid/

Обновите /etc/crypttab файл с этим содержанием:

sdaX_crypt UUID=<UUID_OF_SDAX> /dev/disk/by-uuid/<UUID_OF_SDA1>:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Обновите initramfs

sudo update-initramfs -u

перезагружать

sudo reboot

1 ответ

Решение

Вы можете настроить решение с незашифрованным /bootи файл ключа LUKS:

sudo cryptsetup luksAddKey /dev/sdx1 /boot/random_data_keyfile1

изменять /etc/crypttab в соответствии с:

sda5_crypt UUID=DEVICE_UUID /dev/disk/by-uuid/devicewithkey:/random_data_keyfile1 luks,keyscript=/lib/cryptsetup/scripts/passdev

Это не надежно. Любой удаленно квалифицированный злоумышленник найдет незашифрованный /bootи ключевой файл. Вы можете скрыть это, чтобы сделать это сложнее, но в конечном итоге ваша проблема не решаема.

Вы хотите, чтобы человек мог запускать виртуальную машину, но не иметь к ней доступа. Исполнение требует доступа. Худший случай? Приостановите работу виртуальной машины и проверьте память виртуальной машины. Любой, кто имеет контроль над гипервизором, имеет полный контроль над виртуальной машиной, почти независимо от того, что вы делаете.

Другие вопросы по тегам