Как добавить возможность удаленной разблокировки зашифрованного раздела


Предварительные условия
  • Машина для установки ОС
  • Умение настраивать IP-адреса локально в GRUB и на DHCP-сервере

Установка и настройка зашифрованного раздела

Здесь не рассматривается.

Обзор удаленной разблокировки

Процесс достаточно простой. Ядро загружает образ initramfs, внутри которого нужные модули и скрипты для расшифровывания и монтирования раздела.

Поскольку initramfs выполняется в памяти, существуют ограничения на размер (и сложность) выполняемых программ. По этой причине выбор сделан в пользу dropbear в качестве SSH-сервера в комбинации с busybox в качестве оболочки и базовых утилит.

Шаги ниже требуют полномочий root. Получите права удобным вам способом.

Обновите систему, установите dropbear.

apt update
apt upgrade
apt install dropbear-initramfs

Если в процессе установки будет предупреждение, то его можно пока проигнорировать, исправим это позже:

dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won’t work!

При первой установке пакета также создаются ключи dss, rsa и ecdsa для хоста. Они размещаются в /etc/dropbear-initramfs.

Хотя это и возможно, но не разумно использовать ключи от хоста для подключения к dropbear-initramfs. Ведь чтобы ключи были доступны SSH-серверу они должны быть незашифрованы. Это же справедливо и для initramfs в целом, так как ядру нужно его загрузить.

Это означает, что, даже при полностью зашифрованном root, физического доступа к серверу будет достаточно чтобы получить приватные ключи для dropbear-initramfs (только если раздел boot тоже не зашифрован, но это, к сожалению, лишит наш подход к удаленной разблокировке смысла).

Недостатки использования отдельного закрытого ключа для Dropbear заключаются в том, что клиент при подключении будет показывать страшное сообщение про возможность атаки Man-in-the-middle. Потому что ключи сервера будут отличаться до и после расшифровывания раздела. Самый простой (и, наверное, лучший) путь избежать этого — запускать Dropbear на другом порту.

Файл настроек dropbear-initramfs размещается в /etc/dropbear-initramfs/config.

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

Чтобы прослушивать порт 4546 отредактируйте упоминавшийся файл конфигурации:

DROPBEAR_OPTIONS="-p 4546"

Для душевного спокойствия также в строку добавьте -s -j -k -I 60. Все подробности в man dropbear.

Аутентификация по SSH

В dropbear-initramfs отключен вход с помощью пароля и войти можно только по ключу. Публичные ключи хранятся в /etc/dropbear-initramfs/authorized_keys по одному на строку.

Разумно также ограничить доступ в оболочке только расшифровкой раздела и добавить ограничения для каждого пользователя в authorized_keys по аналогии:

no-port-forwarding,no-agent-forwarding,no-x11-forwarding,command="cryptroot-unlock" ssh-rsa <key>

После любого изменения конфигурации необходимо пересоздать initramfs: update-initramfs -u.

Настройка IP-параметров ядра

Для удаленного подключения к SSH-серверу ядро должно распознать сетевой интерфейс и корректно настроить параметры IP.

Настройка IP-адреса

По умолчанию поведение ядра сводится к получению IP-адреса по DHCP (ip=dhcp). Крайне рекомендуется задать статическую аренду на DHCP-сервере, в таком случае при загрузке будет сразу выдаваться нужный IP-адрес. Это избавит от необходимости добавлять IP-параметры для ядра при загрузке: ip=<client-ip>::<gw-ip>:<netmask> в строку GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub. И пересоздать конфиг GRUB: update-grub.

Результат

Если всё было настроено верно, то после перезапуска и сразу же после загрузки ядром initramfs должны примениться настройки сети. Dropbear вскоре запустится, ожидая подключения.

Теперь можно подключиться к Dropbear удаленно: ssh -p 4546 root@server-ip или:

ssh -o "HostKeyAlgorithms ssh-rsa" -p 4546 root@server-ip

Что приведёт в оболочку busybox:

To unlock root partition, and maybe others like swap, run `cryptroot-unlock` 


BusyBox v1.30.1 (Ubuntu 1:1.27.2-2ubuntu3) built-in shell (ash) Enter 'help' for a list of built-in commands. 

#

Команда cryptroot-unlock это всё что отделяет вас от загрузки сервера!

,

Добавить комментарий