Desbloqueio remoto do LUKS via SSH: dropbear-initramfs e cryptroot-unlock
Desbloqueie um root LUKS num servidor remoto durante o boot: instale o dropbear-initramfs, adicione sua chave, defina porta e IP, recompile o initramfs, conecte via SSH e rode cryptroot-unlock.
Resposta curta: instale o `dropbear-initramfs`, coloque sua chave pública SSH em `/etc/dropbear/initramfs/authorized_keys` (Debian 12/13, Ubuntu 24.04), dê ao initramfs uma configuração de rede, rode `update-initramfs -u` e reinicie. Enquanto o servidor espera a passphrase, conecte via SSH ao pequeno servidor Dropbear na porta dele e rode `cryptroot-unlock`; o boot então continua normalmente.
Este guia parte do princípio de que o sistema de arquivos raiz já está em LUKS, como configurado no guia de root criptografado com LUKS, e de que o `/boot` não está criptografado, que é o padrão dos instaladores do Debian e do Ubuntu. Funciona em qualquer VPS KVM em que você controla o kernel e o initramfs, e é uma base sensata antes de colocar no disco serviços como os de uma stack de self-hosting para VPS pequeno.
Como funciona o desbloqueio remoto
Num sistema com root criptografado, o kernel primeiro carrega um initramfs, um pequeno sistema de arquivos raiz temporário guardado sem criptografia em `/boot`. A função dele é encontrar o dispositivo LUKS, pedir a passphrase, abri-lo e passar o controle ao root real. Normalmente o prompt aparece só no console local.
O `dropbear-initramfs` acrescenta três coisas a esse initramfs: o servidor SSH Dropbear, uma etapa de configuração de rede e o helper `cryptroot-unlock`. O Dropbear inicia antes do prompt da passphrase, aceita apenas logins por chave pública das chaves que você embutiu, e o `cryptroot-unlock` repassa sua passphrase ao prompt do `cryptsetup` que está esperando. Depois que o root é aberto, o initramfs encerra o Dropbear e o seu servidor OpenSSH real inicia como de costume.
Os caminhos de arquivo mudam entre versões
O diretório de configuração mudou com a chegada do Dropbear 2022.83. Muitos tutoriais antigos ainda mostram o caminho antigo, e uma chave colocada lá é ignorada silenciosamente nas versões atuais. Confira a sua versão antes de copiar comandos.
Note · O arquivo de opções é `dropbear.conf`, no mesmo diretório, em todas as versões. As chaves de host do initramfs também ficam ali (`dropbear_ed25519_host_key` e similares) e são separadas das chaves de host do OpenSSH do sistema em execução.
| Versão | Diretório de configuração | Arquivo de chaves |
|---|---|---|
| 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 anteriores | `/etc/dropbear-initramfs/` | `/etc/dropbear-initramfs/authorized_keys` |
Configuração passo a passo no Debian 12/13 e Ubuntu 24.04
- 01.Instale o pacote: `apt install dropbear-initramfs`. Um aviso sobre um arquivo `authorized_keys` ausente ou inválido nesse momento é esperado.
- 02.Adicione sua chave pública, de preferência uma chave Ed25519 dedicada, em `/etc/dropbear/initramfs/authorized_keys`, uma chave por linha, e restrinja-a para que a única coisa que ela possa fazer seja desbloquear.
- 03.Defina as opções do Dropbear em `/etc/dropbear/initramfs/dropbear.conf`, incluindo uma porta fora do padrão para que a chave de host do initramfs não entre em conflito com a chave de host SSH normal no `known_hosts`.
- 04.Configure a rede do initramfs com o parâmetro de kernel `ip=` (estático) ou conte com DHCP se a rede do seu VPS o suportar.
- 05.Recompile o initramfs com `update-initramfs -u` e, se você alterou a linha de comando do kernel, rode `update-grub`.
- 06.Reinicie com o acesso ao console aberto como plano B, depois conecte e rode `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 -uConfiguração de rede no initramfs
O initramfs não lê `/etc/network/interfaces`, netplan nem systemd-networkd. Ele usa o parâmetro de kernel `ip=` ou a linha `IP=` em `/etc/initramfs-tools/initramfs.conf`. Sem nenhum dos dois, ele tenta DHCP em todas as interfaces, o que funciona em muitas nuvens, mas não é garantido num VPS com endereçamento estático.
O formato é `ip=<client-ip>::<gateway-ip>:<netmask>:<hostname>:<device>:off`. Use os valores de `ip -4 addr` e `ip route` no sistema em execução. O nome da interface dentro do initramfs costuma ser o mesmo nome previsível (por exemplo `ens3` ou `eth0`); se tiver dúvida, deixe o campo do dispositivo vazio e a primeira interface será usada. IPv4 é a escolha confiável aqui, já que o suporte a IPv6 na etapa de rede do initramfs é limitado.
# /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-unlockDesbloqueio e uso no dia a dia
Após um reboot, espere até o servidor responder na porta 2222 e conecte como `root`. Com o comando forçado da etapa de configuração, o `cryptroot-unlock` inicia imediatamente e pede a passphrase do LUKS; sem ele, você cai num shell BusyBox e digita `cryptroot-unlock` por conta própria. Se der certo, a sessão é fechada, o initramfs continua o boot e, um minuto depois, seu servidor SSH normal responde na porta 22, reforçado como no guia de hardening de SSH.
Use uma entrada separada no `known_hosts` para a porta de desbloqueio, por exemplo um bloco `Host myserver-unlock` em `~/.ssh/config` com `Port 2222` e `HostKeyAlias myserver-unlock`. A cada atualização de kernel, Debian e Ubuntu regeneram o initramfs e mantêm sua chave e suas opções do Dropbear, mas teste um reboot depois de upgrades grandes.
- ▹Conexão recusada: a configuração de rede está errada; confira os valores de `ip=` no console.
- ▹Aviso de chave de host: você está batendo na chave de host do initramfs com o alias normal; use o alias separado.
- ▹O `cryptroot-unlock` diz que não há dispositivos esperando: o sistema já inicializou, ou falta a entrada do root em `/etc/crypttab`.
- ▹Alterações de chave não têm efeito: você editou o caminho antigo `/etc/dropbear-initramfs/` ou esqueceu o `update-initramfs -u`.
Modelo de ameaça: o que o desbloqueio remoto protege e o que não protege
LUKS com desbloqueio remoto protege os dados em repouso. Um disco desligado, uma imagem de disco copiada, um drive descomissionado ou um servidor apreendido enquanto desligado revelam apenas texto cifrado. É uma garantia real e útil para um VPS.
Ele não protege um servidor em execução de quem controla o host. O initramfs e o kernel em `/boot` não são criptografados, então alguém com acesso ao hypervisor ou ao console pode modificá-los para registrar sua passphrase no próximo boot, e a memória de uma VM em execução, incluindo a chave mestra do LUKS, pode ser lida a partir do host. Trate o desbloqueio remoto como proteção contra apreensão e vazamento de disco, não contra um hypervisor hostil. Anomalias no momento do reboot, como uma chave de host do Dropbear alterada, merecem investigação.
Note · Num VPS NoctisNode você tem root completo em KVM com as imagens Debian 13/12 e Ubuntu 24.04, então esta configuração funciona como descrito. O mesmo limite vale aqui como em qualquer lugar: a criptografia protege o disco, não um guest em execução. Veja VPS sem logs explicado para saber o que o lado do provedor registra e o que não registra.
Perguntas frequentes
QOnde fica o arquivo authorized_keys do dropbear-initramfs no Debian 12?
ANo Debian 12 e 13 e no Ubuntu 24.04 ele fica em `/etc/dropbear/initramfs/authorized_keys`. O Debian 11 e o Ubuntu 22.04 usavam `/etc/dropbear-initramfs/authorized_keys`. Rode `update-initramfs -u` após qualquer alteração.
QO que o cryptroot-unlock faz?
AO `cryptroot-unlock` é um helper dentro do initramfs que encontra o prompt de passphrase do LUKS pendente e repassa a ele a passphrase digitada. Quando o dispositivo abre, o boot continua e a sessão do Dropbear termina.
QComo mudo a porta SSH do dropbear-initramfs?
ADefina `DROPBEAR_OPTIONS="-p 2222"` (mais quaisquer outras flags) em `/etc/dropbear/initramfs/dropbear.conf`, depois rode `update-initramfs -u` e reinicie.
QO desbloqueio remoto do LUKS via SSH é seguro num VPS?
AEle protege os dados num disco desligado ou copiado. Não protege contra alguém com acesso ao hypervisor, que poderia alterar o initramfs não criptografado ou ler a memória da VM em execução.
QPosso usar LUKS2 com o dropbear-initramfs?
ASim. O desbloqueio acontece no espaço de usuário do Linux com o `cryptsetup`, então LUKS2 com Argon2id funciona; veja LUKS2 vs LUKS1 para as diferenças de formato.