Полное системное шифрование с помощью LUKS на автономном сервере - разблокировка с помощью dropbear и busybox. Как?
Я зашифровал безголовый сервер с помощью cryptsetup / LUKS.
2 жестких диска с 512 МБ / загрузочные /dev/md0 и 1,61 ТБ LUKS, зашифрованные /dev/md1 с LVM, содержащими /, swap и другие.
Я установил dropbear (и busybox уже был установлен), чтобы разблокировать все во время процесса загрузки. Я использую GRUB2.
Пока все отлично работает. Я могу войти с закрытым ключом на dropbear, прослушивая порт 22, и разблокировать LUKS с помощью команды
echo -n "passphrase" > /lib/cryptsetup/passfifo
как только я это делаю, сервер загружается, как будто ничего не зашифровано. Что именно то, что я хочу.
Теперь, хотя это работает нормально, я не хочу, чтобы это работало.
Прежде всего, я не могу найти никакой документации по / lib / cryptsetup / passfifo. Как это вообще работает? Во-вторых, я сгенерировал ключевой файл с GPG (также с cryptsetup в качестве устройства обратной связи), который я хочу использовать вместо пароля. Но я не могу найти документальный фильм о том, как это сделать, в busybox. Кажется, что GPG не установлен, поэтому я не могу использовать этот ключ (могу ли я как-то сделать GPG доступным для busybox?)
Поэтому на данный момент единственный способ разблокировать мою систему - это передать мой пароль в / lib / cryptsetup / passfifo, который я не хочу использовать. Я попытался использовать cryptsetup непосредственно в его пути busybox, как
cryptsetup luksOpen /dev/md1 cryptdisk
Я не показал никаких ошибок, но моя система не продолжила загрузку.
Любые идеи, что я мог бы сделать, или что-то не так с моим подходом справиться с этим?
Фрэнк
1 ответ
Это больше комментарий, чем ответ, извините. Но так как вы еще не получили никаких ответов, я все равно хотел написать что-нибудь.
Что касается того, как это вообще работает:
В Initramfs у вас обычно есть один главный процесс (обычно на основе busybox /init
сценарий оболочки), который отвечает за обеспечение доступности корневого раздела перед передачей процесса загрузки реальной системе инициализации вашей установки Ubuntu.
В случае dropbear
в Initramfs, это отдельный процесс, запущенный /init
, Заходя в dropbear, вы получаете оболочку, которая является еще одним процессом. Все время оригинал /init
должен быть запущен и чего-то ждать, в этом случае пароль LUKS.
Так что же /init
Скорее всего, скрипт здесь, после запуска dropbear, создает именованный канал, или fifo, т.е. /lib/cryptsetup/passfifo
, А потом он читает из этой именованной трубы. Это чтение будет блокироваться до тех пор, пока на самом деле не будет чего читать, так вот как /init
зависает и ждет ввода.
Затем через несколько лет вы входите в dropbear
и сделай свой echo passphrase > /lib/cryptsetup/passfifo
в какой момент /init
просыпается от сна и возобновляет работу, чтобы разблокировать LUKS и продолжить процесс загрузки.
И это в основном общее представление о том, как это работает. Если для этого нет документации, вам придется прочитать сценарий оболочки.
Что касается зашифрованного ключа GPG в Initramfs, я уверен, что это стандартный метод в Ubuntu, возможно, для настройки через /etc/crypttab
, Вы проверили вики на предмет как?
Это, безусловно, потребует включения GPG в Initramfs. но я обрисовал альтернативный подход, который можно было бы заставить работать без дополнительных зависимостей:
Как мне использовать dm-crypt (LUKS) с GnuPG, чтобы использовать двухфакторный для FDE?
Проблема с этим, конечно, в том, что он не является стандартным, поэтому, хотя теоретически это может быть проще, его на самом деле сложнее настроить.