Sblocco remoto LUKS via SSH: dropbear-initramfs e cryptroot-unlock
Sblocca all'avvio una root LUKS su un server remoto: installa dropbear-initramfs, aggiungi la tua chiave, imposta porta e IP, ricostruisci l'initramfs, poi entra via SSH ed esegui cryptroot-unlock.
In breve: installa `dropbear-initramfs`, metti la tua chiave pubblica SSH in `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), fornisci all'initramfs una configurazione di rete, esegui `update-initramfs -u` e riavvia. Mentre il server attende la passphrase, connettiti via SSH al piccolo server Dropbear sulla sua porta dedicata ed esegui `cryptroot-unlock`; a quel punto l'avvio prosegue normalmente.
Questa guida presuppone che il filesystem root sia già su LUKS, come configurato nella guida al root cifrato con LUKS, e che `/boot` non sia cifrato, che è l'impostazione predefinita degli installer di Debian e Ubuntu. Funziona su qualsiasi VPS KVM in cui controlli kernel e initramfs, ed è una base sensata prima di mettere sul disco servizi come quelli di uno stack self-hosting per VPS piccoli.
Come funziona lo sblocco remoto
Su un sistema con root cifrata il kernel carica prima un initramfs, un piccolo filesystem root temporaneo salvato in chiaro in `/boot`. Il suo compito è trovare il dispositivo LUKS, chiedere la passphrase, aprirlo e passare il controllo alla root vera. Normalmente il prompt compare solo sulla console locale.
`dropbear-initramfs` aggiunge tre cose a quell'initramfs: il server SSH Dropbear, un passaggio di configurazione della rete e l'helper `cryptroot-unlock`. Dropbear parte prima del prompt della passphrase, accetta solo login a chiave pubblica con le chiavi che hai incluso, e `cryptroot-unlock` inoltra la tua passphrase al prompt di `cryptsetup` in attesa. Una volta aperta la root, l'initramfs termina Dropbear e il tuo vero server OpenSSH si avvia come al solito.
I percorsi dei file cambiano tra le versioni
La directory di configurazione è stata spostata con l'arrivo di Dropbear 2022.83. Molti tutorial vecchi mostrano ancora il percorso precedente, e una chiave messa lì viene ignorata senza avvisi nelle release attuali. Controlla la tua release prima di copiare i comandi.
Note · Il file delle opzioni è `dropbear.conf`, nella stessa directory, su tutte le release. Lì si trovano anche le host key dell'initramfs (`dropbear_ed25519_host_key` e simili), separate dalle host key OpenSSH del sistema in esecuzione.
| Release | Directory di configurazione | File delle chiavi |
|---|---|---|
| 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 e precedenti | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Configurazione passo per passo su Debian 12/13 e Ubuntu 24.04
- 01.Installa il pacchetto: `apt install dropbear-initramfs`. A questo punto è normale un avviso su un file `authorized_keys` mancante o non valido.
- 02.Aggiungi la tua chiave pubblica, idealmente una chiave Ed25519 dedicata, a `/etc/dropbear/initramfs/authorized_keys`, una chiave per riga, e limitala in modo che possa solo sbloccare.
- 03.Imposta le opzioni di Dropbear in `/etc/dropbear/initramfs/dropbear.conf`, compresa una porta non standard così che la host key dell'initramfs non entri in conflitto con la tua normale host key SSH in `known_hosts`.
- 04.Configura la rete per l'initramfs con il parametro del kernel `ip=` (statico) oppure affidati al DHCP se la rete del tuo VPS lo supporta.
- 05.Ricostruisci l'initramfs con `update-initramfs -u` e, se hai modificato la riga di comando del kernel, esegui `update-grub`.
- 06.Riavvia tenendo aperto l'accesso alla console come piano B, poi connettiti ed esegui `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 -uConfigurazione di rete nell'initramfs
L'initramfs non legge `/etc/network/interfaces`, netplan o systemd-networkd. Usa il parametro del kernel `ip=`, oppure la riga `IP=` in `/etc/initramfs-tools/initramfs.conf`. Se nessuno dei due è impostato, prova il DHCP su tutte le interfacce, il che funziona su molti cloud ma non è garantito su un VPS con assegnazione statica.
Il formato è `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Usa i valori di `ip -4 addr` e `ip route` sul sistema in esecuzione. Il nome dell'interfaccia dentro l'initramfs di solito è lo stesso nome predicibile (per esempio `ens3` o `eth0`); se non sei sicuro, lascia vuoto il campo del dispositivo e verrà usata la prima interfaccia. Qui IPv4 è la scelta affidabile, perché il supporto IPv6 nel passaggio di rete dell'initramfs è limitato.
# /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-unlockSblocco e uso quotidiano
Dopo un riavvio, aspetta che il server risponda sulla porta 2222, poi connettiti come `root`. Con il comando forzato del passaggio di configurazione, `cryptroot-unlock` parte subito e chiede la passphrase LUKS; senza, ottieni una shell BusyBox e digiti tu `cryptroot-unlock`. Se va a buon fine la sessione si chiude, l'initramfs continua l'avvio e un minuto dopo il tuo normale server SSH risponde sulla porta 22, protetto come nella guida all'hardening SSH.
Usa una voce `known_hosts` separata per la porta di sblocco, per esempio un blocco `Host myserver-unlock` in `~/.ssh/config` con `Port 2222` e `HostKeyAlias myserver-unlock`. A ogni aggiornamento del kernel, Debian e Ubuntu rigenerano l'initramfs mantenendo la chiave e le opzioni di Dropbear, ma prova un riavvio dopo gli aggiornamenti importanti.
- ▹Connection refused: la configurazione di rete è sbagliata; controlla i valori di `ip=` dalla console.
- ▹Avviso sulla host key: stai incontrando la host key dell'initramfs sotto l'alias normale; usa l'alias separato.
- ▹`cryptroot-unlock` dice che nessun dispositivo è in attesa: il sistema si è già avviato, oppure in `/etc/crypttab` manca la voce della root.
- ▹Le modifiche alla chiave non hanno effetto: hai modificato il vecchio percorso `/etc/dropbear-initramfs/` o hai dimenticato `update-initramfs -u`.
Threat model: cosa protegge e cosa non protegge lo sblocco remoto
LUKS con sblocco remoto protegge i dati a riposo. Un disco spento, un'immagine del disco copiata, un'unità dismessa o un server sequestrato mentre è spento rivelano solo testo cifrato. Per un VPS è una garanzia reale e utile.
Non protegge un server in esecuzione da chi controlla l'host. L'initramfs e il kernel in `/boot` non sono cifrati, quindi chi ha accesso all'hypervisor o alla console può modificarli per registrare la tua passphrase al prossimo avvio, e la memoria di una VM in esecuzione, compresa la master key LUKS, può essere letta dall'host. Considera lo sblocco remoto una protezione contro sequestri e fughe di dischi, non contro un hypervisor ostile. Vale la pena indagare sulle anomalie al riavvio, come una host key di Dropbear cambiata.
Note · Su un VPS NoctisNode hai root completo su KVM con le immagini Debian 13/12 e Ubuntu 24.04, quindi questa configurazione funziona come descritto. Qui vale lo stesso limite di ovunque: la cifratura protegge il disco, non un guest in esecuzione. Vedi il VPS no-logs spiegato per cosa registra e cosa non registra il provider.
FAQ
QDove si trova il file authorized_keys di dropbear initramfs su Debian 12?
ASu Debian 12 e 13 e su Ubuntu 24.04 è `/etc/dropbear/initramfs/authorized_keys`. Debian 11 e Ubuntu 22.04 usavano `/etc/dropbear-initramfs/authorized_keys`. Esegui `update-initramfs -u` dopo ogni modifica.
QCosa fa cryptroot-unlock?
A`cryptroot-unlock` è un helper dentro l'initramfs che trova il prompt della passphrase LUKS in attesa e gli passa la passphrase che digiti. Una volta aperto il dispositivo, l'avvio prosegue e la sessione Dropbear termina.
QCome cambio la porta SSH di dropbear-initramfs?
AImposta `DROPBEAR_OPTIONS="-p 2222"` (più eventuali altri flag) in `/etc/dropbear/initramfs/dropbear.conf`, poi esegui `update-initramfs -u` e riavvia.
QLo sblocco remoto LUKS via SSH è sicuro su un VPS?
AProtegge i dati su un disco spento o copiato. Non può proteggere da chi ha accesso all'hypervisor, che potrebbe alterare l'initramfs non cifrato o leggere la memoria della VM in esecuzione.
QPosso usare LUKS2 con dropbear-initramfs?
ASì. Lo sblocco avviene nello userspace Linux con `cryptsetup`, quindi LUKS2 con Argon2id funziona; vedi LUKS2 vs LUKS1 per le differenze tra i formati.