Zdalne odblokowanie LUKS przez SSH: dropbear-initramfs i cryptroot-unlock
Odblokuj zaszyfrowany LUKS root na zdalnym serwerze przy starcie: zainstaluj dropbear-initramfs, dodaj klucz, ustaw port i IP, przebuduj initramfs, a potem zaloguj się przez SSH i uruchom cryptroot-unlock.
Krótko: zainstaluj `dropbear-initramfs`, umieść swój publiczny klucz SSH w `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), nadaj initramfs konfigurację sieci, uruchom `update-initramfs -u` i zrestartuj. Gdy serwer czeka na hasło, połącz się przez SSH z małym serwerem Dropbear na osobnym porcie i uruchom `cryptroot-unlock`; potem start przebiega normalnie.
Ten poradnik zakłada, że główny system plików jest już na LUKS, tak jak w poradniku o zaszyfrowanym root z LUKS, a `/boot` jest niezaszyfrowany, co jest domyślnym ustawieniem instalatorów Debiana i Ubuntu. Działa na każdym VPS KVM, na którym kontrolujesz jądro i initramfs, i jest rozsądną podstawą, zanim umieścisz na dysku usługi takie jak w stosie self-hosting na małym VPS.
Jak działa zdalne odblokowanie
W systemie z zaszyfrowanym rootem jądro najpierw ładuje initramfs — mały tymczasowy główny system plików przechowywany bez szyfrowania w `/boot`. Jego zadaniem jest znaleźć urządzenie LUKS, zapytać o hasło, otworzyć je i przekazać sterowanie prawdziwemu rootowi. Normalnie monit pojawia się tylko na lokalnej konsoli.
`dropbear-initramfs` dodaje do tego initramfs trzy rzeczy: serwer SSH Dropbear, krok konfiguracji sieci i pomocnika `cryptroot-unlock`. Dropbear startuje przed monitem o hasło, przyjmuje wyłącznie logowania kluczem publicznym z wbudowanych kluczy, a `cryptroot-unlock` przekazuje Twoje hasło do czekającego monitu `cryptsetup`. Po otwarciu roota initramfs zabija Dropbear, a Twój właściwy serwer OpenSSH startuje jak zwykle.
Ścieżki plików różnią się między wersjami
Katalog konfiguracji zmienił położenie wraz z Dropbear 2022.83. Wiele starszych poradników wciąż pokazuje starą ścieżkę, a klucz umieszczony tam jest w obecnych wydaniach po cichu ignorowany. Sprawdź swoje wydanie, zanim skopiujesz polecenia.
Note · Plik opcji to `dropbear.conf` w tym samym katalogu w każdym wydaniu. Tam też znajdują się klucze hosta initramfs (`dropbear_ed25519_host_key` i pokrewne), oddzielne od kluczy hosta OpenSSH działającego systemu.
| Wydanie | Katalog konfiguracji | Plik kluczy |
|---|---|---|
| Debian 13 (trixie) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 12 (bookworm) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Ubuntu 24.04 (noble) | `/etc/dropbear/initramfs/` | `/etc/dropbear/initramfs/authorized_keys` |
| Debian 11, Ubuntu 22.04 i starsze | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Konfiguracja krok po kroku na Debian 12/13 i Ubuntu 24.04
- 01.Zainstaluj pakiet: `apt install dropbear-initramfs`. Ostrzeżenie o brakującym lub nieprawidłowym pliku `authorized_keys` na tym etapie jest normalne.
- 02.Dodaj swój klucz publiczny, najlepiej dedykowany klucz Ed25519, do `/etc/dropbear/initramfs/authorized_keys`, po jednym kluczu w linii, i ogranicz go tak, by mógł służyć wyłącznie do odblokowania.
- 03.Ustaw opcje Dropbear w `/etc/dropbear/initramfs/dropbear.conf`, w tym niestandardowy port, aby klucz hosta initramfs nie kolidował z Twoim zwykłym kluczem hosta SSH w `known_hosts`.
- 04.Skonfiguruj sieć dla initramfs parametrem jądra `ip=` (statycznie) lub polegaj na DHCP, jeśli sieć Twojego VPS go obsługuje.
- 05.Przebuduj initramfs przez `update-initramfs -u`, a jeśli zmieniłeś linię poleceń jądra, uruchom `update-grub`.
- 06.Zrestartuj z otwartym dostępem do konsoli jako zabezpieczeniem, a potem połącz się i uruchom `cryptroot-unlock`.
apt install dropbear-initramfs
# 1. Key (forced command: the key can only unlock)
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 AAAA...yourkey unlock@laptop' \
> /etc/dropbear/initramfs/authorized_keys
chmod 600 /etc/dropbear/initramfs/authorized_keys
# 2. Options in /etc/dropbear/initramfs/dropbear.conf
# -p 2222 listen on port 2222
# -s disable password logins
# -j -k no local/remote port forwarding
# -I 300 drop idle sessions after 300 s
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 300"
# 3. Rebuild
update-initramfs -uKonfiguracja sieci w initramfs
Initramfs nie czyta `/etc/network/interfaces`, netplan ani systemd-networkd. Używa parametru jądra `ip=` lub linii `IP=` w `/etc/initramfs-tools/initramfs.conf`. Gdy żadne z nich nie jest ustawione, próbuje DHCP na wszystkich interfejsach, co działa w wielu chmurach, ale nie jest gwarantowane na VPS ze statycznym przydziałem.
Format to `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Użyj wartości z `ip -4 addr` i `ip route` w działającym systemie. Nazwa interfejsu wewnątrz initramfs to zwykle ta sama przewidywalna nazwa (na przykład `ens3` lub `eth0`); jeśli nie masz pewności, zostaw pole urządzenia puste, a użyty zostanie pierwszy interfejs. IPv4 jest tu niezawodnym wyborem, bo obsługa IPv6 w kroku sieciowym initramfs jest ograniczona.
# /etc/default/grub (static IPv4 example, documentation addresses)
GRUB_CMDLINE_LINUX="ip=203.0.113.10::203.0.113.1:255.255.255.0::ens3:off"
update-grub
update-initramfs -u
# From your workstation after reboot:
ssh -p 2222 [email protected]
# without the forced command, type: cryptroot-unlockOdblokowanie i codzienne użytkowanie
Po restarcie poczekaj, aż serwer zacznie odpowiadać na porcie 2222, a następnie połącz się jako `root`. Z wymuszonym poleceniem z kroku konfiguracji `cryptroot-unlock` startuje od razu i pyta o hasło LUKS; bez niego dostajesz powłokę BusyBox i sam wpisujesz `cryptroot-unlock`. Po powodzeniu sesja się zamyka, initramfs kontynuuje start, a minutę później Twój zwykły serwer SSH odpowiada na porcie 22, zabezpieczony jak w poradniku o hardeningu SSH.
Użyj osobnego wpisu `known_hosts` dla portu odblokowania, na przykład bloku `Host myserver-unlock` w `~/.ssh/config` z `Port 2222` i `HostKeyAlias myserver-unlock`. Przy każdej aktualizacji jądra Debian i Ubuntu regenerują initramfs i zachowują Twój klucz oraz opcje Dropbear, ale po większych aktualizacjach przetestuj jeden restart.
- ▹Connection refused: konfiguracja sieci jest błędna; sprawdź wartości `ip=` na konsoli.
- ▹Ostrzeżenie o kluczu hosta: trafiasz na klucz hosta initramfs pod zwykłym aliasem; użyj osobnego aliasu.
- ▹`cryptroot-unlock` mówi, że żadne urządzenie nie czeka: system już wystartował albo `/etc/crypttab` nie ma wpisu dla roota.
- ▹Zmiany klucza nie działają: edytowałeś starą ścieżkę `/etc/dropbear-initramfs/` lub zapomniałeś o `update-initramfs -u`.
Model zagrożeń: przed czym zdalne odblokowanie chroni, a przed czym nie
LUKS ze zdalnym odblokowaniem chroni dane w spoczynku. Wyłączony dysk, skopiowany obraz dysku, wycofany z użytku nośnik czy serwer zajęty w stanie wyłączonym ujawniają tylko szyfrogram. To realna i użyteczna gwarancja dla VPS.
Nie chroni natomiast działającego serwera przed tym, kto kontroluje hosta. Initramfs i jądro w `/boot` są niezaszyfrowane, więc ktoś z dostępem do hiperwizora lub konsoli może je zmodyfikować tak, by przy następnym starcie zapisały Twoje hasło, a pamięć działającej VM, łącznie z kluczem głównym LUKS, da się odczytać z hosta. Traktuj zdalne odblokowanie jako ochronę przed zajęciem sprzętu i wyciekiem dysków, a nie przed wrogim hiperwizorem. Anomalie przy restarcie, takie jak zmieniony klucz hosta Dropbear, warto zbadać.
Note · Na VPS NoctisNode dostajesz pełny root na KVM z obrazami Debian 13/12 i Ubuntu 24.04, więc ta konfiguracja działa zgodnie z opisem. Obowiązuje tu to samo ograniczenie co wszędzie: szyfrowanie chroni dysk, a nie działającego gościa. Co strona dostawcy rejestruje, a czego nie, opisuje artykuł VPS bez logów — wyjaśnienie.
FAQ
QGdzie jest plik authorized_keys dla dropbear initramfs w Debianie 12?
AW Debianie 12 i 13 oraz w Ubuntu 24.04 jest to `/etc/dropbear/initramfs/authorized_keys`. Debian 11 i Ubuntu 22.04 używały `/etc/dropbear-initramfs/authorized_keys`. Po każdej zmianie uruchom `update-initramfs -u`.
QCo robi cryptroot-unlock?
A`cryptroot-unlock` to pomocnik wewnątrz initramfs, który znajduje oczekujący monit o hasło LUKS i przekazuje mu wpisane przez Ciebie hasło. Gdy urządzenie się otworzy, start trwa dalej, a sesja Dropbear się kończy.
QJak zmienić port SSH dla dropbear-initramfs?
AUstaw `DROPBEAR_OPTIONS="-p 2222"` (plus inne flagi) w `/etc/dropbear/initramfs/dropbear.conf`, następnie uruchom `update-initramfs -u` i zrestartuj.
QCzy zdalne odblokowanie LUKS przez SSH jest bezpieczne na VPS?
AChroni dane na wyłączonym lub skopiowanym dysku. Nie chroni przed kimś z dostępem do hiperwizora, kto mógłby zmienić niezaszyfrowany initramfs lub odczytać pamięć działającej VM.
QCzy mogę używać LUKS2 z dropbear-initramfs?
ATak. Odblokowanie odbywa się w przestrzeni użytkownika Linuksa przez `cryptsetup`, więc LUKS2 z Argon2id działa; różnice formatów opisuje LUKS2 vs LUKS1.