Есть ли способ автоматически разблокировать диск LUKS во время загрузки, когда ключевой файл хранится на удаленной машине. Идея состоит в том, чтобы серверы могли перезапускаться без какого-либо вмешательства пользователя. Серверы находятся в общедоступном облаке, и я не могу зашифровать корневой раздел. Если оставить ключевой файл на машине, шифрование будет просто невозможно.
Отсюда идея иметь файл ключа на удаленной машине, подключающейся через безопасный канал, такой как ssh.
Мандос кажется, делает то, что мне нужно, но у меня есть два вопроса.
- Вся документация относится к корневым файловым системам. Может ли работать с любым диском?
- В документации указано, что он работает только в интрасети, будет ли это работать, если локальный и удаленный серверы соединяются через VPN?
Это лучшее решение? единственное решение?
запах и скоба можно добиться этого даже с зашифрованным корневым разделом в CentOS 7 (и я лично использую его для автоматизации загрузки в моей домашней сети и на работе). Посмотрите и проверьте, подключается ли он к вашей виртуальной машине.
У вас есть различные онлайн-решения (например, Вот), где в initrd включен небольшой ssh-сервер (busybox + dropbear), который запускает его во время загрузки перед монтированием файловой системы и позволяет связаться с ним, чтобы ввести кодовую фразу в качестве входных данных.
Вы можете что-то сделать с этим: в initrd, внутри запуска sshd
сервер для ожидания удаленного подключения, запустите ssh
подключение к удаленному хосту, хранящему ключи, с определенными ключами ssh, чтобы получить файл ключа (выполнение scp), а затем разблокировать локальную файловую систему с помощью ключа LUKS.
Однако он не лишен недостатков: вам, конечно же, необходимо удалить загруженный ключ LUKS сразу после разблокировки, иначе вы ничего не получите. Еще лучше, если вы найдете способ хранить его в ОЗУ только на необходимое время и нигде не хранить. Кроме того, «любой» злоумышленник, имеющий возможность читать содержимое вашего initrd, может найти соединение ssh и его ключ ssh, связаться с вашим удаленным хостом и загрузить ключ LUKS. Однако если это происходит, это означает, что ваш злоумышленник явно нацелен на вас и не торопится, чтобы изучить вашу конкретную настройку, это явно выходит за рамки script kiddies. Вы должны, по крайней мере, внимательно просмотреть все соединения, которые загрузили ключ, события должны быть связаны с другими вашими предупреждениями мониторинга, показывающими, что данный сервер действительно перезагружается (что опять же не защитит вас от злоумышленника, который смог изменить ваш initrd).
Вы также должны учитывать случаи, когда сеть выходит из строя в этот момент, scp
не может подключиться и т. д. Таким образом, имея в то же время возможность небольшого sshd
сервер, чтобы иметь возможность подключаться к нему и отлаживать вещи - неплохая идея. Или посмотрите, какие внеполосные решения может предложить ваш облачный провайдер.
Я использовал Mandos для хранения и извлечения парольной фразы, чтобы разблокировать корневую файловую систему, чтобы разрешить автоматические перезагрузки и просто сохранить ключи для всех других томов, используемых этой системой, в файле на этом зашифрованном корневом томе.
Я использовал mandos через WAN-соединение (настроив DHCP и IP-адрес сервера mandos в клиентской системе, а не полагаясь на Zeroconf, который работает только в локальной LAN), не беспокоясь о VPN-соединении.
Мандос, кажется, делает то, что я хочу, но у меня есть два вопроса. - Вся документация относится к корневым файловым системам. Может ли работать с любым диском?
Что ж, пакет mandos-client предполагает, что вы хотите использовать его для дешифрования корневой файловой системы, и все его двоичные файлы имеют значения по умолчанию, которые делают их наиболее простыми в использовании в среде initramfs. Но это конечно возможно запустить его в другом месте. Чтобы запустить двоичный файл "mandos-client" из обычной системной среды, ему потребуются следующие параметры: --seckey=/etc/keys/mandos/seckey.txt --pubkey=/etc/keys/mandos/pubkey.txt --network-hook-dir=/etc/mandos/network-hooks.d
- В документации указано, что он работает только в интрасети, будет ли это работать, если локальный и удаленный серверы соединяются через VPN?
Да, используя --connect
параметр для mandos-client, а также настройку сервера Mandos для использования статического номера порта (используя port
вариант в mandos.conf
файл). Обычно, когда вы хотите использовать сервер вне интрасети, настройка IP-адреса и маршрута на стороне клиента также вызывает беспокойство, но поскольку Вы не шифруя корневой раздел, у вас нет этой проблемы.