desbloqueando rootfs via login ssh no initramfs
Você pode desbloquear seus rootfs na inicialização a partir do controle remoto, usando ssh para efetuar login no sistema de inicialização enquanto estiver executando o initramfs montado.
Configuração
Para que o desbloqueio remoto funcione, os seguintes pacotes devem ser instalados antes da criação do initramfs: dropbear
busybox
O arquivo /etc/initramfs-tools/initramfs.conf
contém as opções de configuração usadas ao criar o initramfs. Ele deve conter BUSYBOX=y
(definido como o padrão quando o pacote busybox é instalado) ter o busybox instalado no initramfs e não deve conter
DROPBEAR=n
, o que desabilitaria a instalação do dropbear no initramfs. Se definido como DROPBEAR=y
, dropbear será instalado em qualquer caso; se
DROPBEAR
não estiver definido, o dropbear será instalado apenas no caso de uma configuração de criptografia existente.
As chaves do host usadas para o initramfs são dropbear_dss_host_key
e
dropbear_rsa_host_key
, ambas localizadas em /etc/initramfs-tools/etc/dropbear/
. Se eles não existirem quando o initramfs for compilado, eles serão criados automaticamente. A seguir estão os comandos para criá-los manualmente:
dropbearkey -t dss -f /etc/initramfs-tools/etc/dropbear/dropbear_dss_host_key
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key
Como o initramfs não será criptografado, a autenticação de chave pública será assumida. As chaves usadas para isso serão retiradas
/etc/initramfs-tools/root/.ssh/authorized_keys
. Se esse arquivo não existir quando o initramfs for compilado, ele será criado e
/etc/initramfs-tools/root/.ssh/id_rsa.pub
será adicionado a ele. Se o último arquivo também não existir, ele será gerado automaticamente - você encontrará a chave privada correspondente na qual mais tarde precisará fazer login no initramfs em /etc/initramfs-tools/root/.ssh/id_rsa
(ou id_rsa.dropbear
no caso de precisar no formato dropbear). A seguir, estão os comandos para executar as respectivas etapas manualmente:
Para criar uma chave (no formato dropbear):
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
Para converter a chave do formato dropbear para o formato openssh:
/usr/lib/dropbear/dropbearconvert dropbear openssh \
/etc/initramfs-tools/root/.ssh/id_rsa.dropbear \
/etc/initramfs-tools/root/.ssh/id_rsa
Para extrair a chave pública:
dropbearkey -y -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear | \
grep "^ssh-rsa " > /etc/initramfs-tools/root/.ssh/id_rsa.pub
Para adicionar a chave pública ao arquivo allowed_keys:
cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys
No caso de você querer alguma interface para se configurado usando DHCP, definindo
DEVICE=
em /etc/initramfs-tools/initramfs.conf
deve ser suficiente. O initramfs também deve respeitar o ip=
parâmetro do kernel. No caso de você usar o grub, provavelmente poderá configurá-lo /boot/grub/menu.lst
, na # kopt=
linha ' ' ou anexado a kernel
linhas específicas ' '. O ip=
parâmetro kernel está documentado na Documentation/nfsroot.txt
árvore de fontes do kernel.
Problemas
Não se esqueça de executar update-initramfs
quando você alterou a configuração para torná-la eficaz!
Coletar entropia suficiente para o daemon ssh às vezes parece ser um problema. A inicialização do daemon ssh pode ser adiada até que a entropia suficiente seja recuperada. Isso não impede o processo de inicialização, portanto, quando você estiver no console, não precisará esperar pelo sshd concluir sua inicialização.
Procedimento de desbloqueio
Para desbloquear do controle remoto, você pode fazer algo assim:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" root@initramfshost.example.com \
"echo -ne \"secret\" >/lib/cryptsetup/passfifo"
Este exemplo pressupõe que você tenha um known_hosts
arquivo extra " ~/.ssh/known_hosts.initramfs
" que contém a chave do host do sistema de criptografia, que você tenha um arquivo " ~/id_rsa.initramfs
" que contém a chave autorizada para o sistema de criptografia, que o nome do sistema de criptografia é " initramfshost.example.com
" e que o a senha de criptografia é " secret
"
- < debian@x.ray.net
>, Qua, 30 de setembro de 2009
zless /usr/share/doc/cryptsetup/README.remote.gz