Шифрование 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
и ключевой файл. Вы можете скрыть это, чтобы сделать это сложнее, но в конечном итоге ваша проблема не решаема.
Вы хотите, чтобы человек мог запускать виртуальную машину, но не иметь к ней доступа. Исполнение требует доступа. Худший случай? Приостановите работу виртуальной машины и проверьте память виртуальной машины. Любой, кто имеет контроль над гипервизором, имеет полный контроль над виртуальной машиной, почти независимо от того, что вы делаете.