desbloqueo de rootfs a través de inicio de sesión ssh en initramfs
Puede desbloquear sus rootfs en el arranque desde el control remoto, utilizando ssh para iniciar sesión en el sistema de arranque mientras se ejecuta con el initramfs montado.
Preparar
Para que funcione el desbloqueo remoto, se deben instalar los siguientes paquetes antes de compilar initramfs: dropbear
busybox
El archivo /etc/initramfs-tools/initramfs.conf
contiene las opciones de configuración utilizadas al construir initramfs. Debe contener BUSYBOX=y
(esto se establece por defecto cuando se instala el paquete busybox) para tener busybox instalado en initramfs, y no debe contener
DROPBEAR=n
, lo que deshabilitaría la instalación de dropbear en initramfs. Si se establece en DROPBEAR=y
, dropbear se instalará en cualquier caso; si
DROPBEAR
no está configurado, entonces dropbear solo se instalará en caso de una configuración de criptroot existente.
Las claves de host utilizadas para initramfs son dropbear_dss_host_key
y
dropbear_rsa_host_key
, ambas ubicadas en /etc/initramfs-tools/etc/dropbear/
. Si no existen cuando se compila initramfs, se crearán automáticamente. Los siguientes son los comandos para crearlos 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 los initramfs no se cifrarán, se supone la autenticación de clave pública. Las claves utilizadas para eso se tomarán de
/etc/initramfs-tools/root/.ssh/authorized_keys
. Si este archivo no existe cuando se compila initramfs, se creará y
/etc/initramfs-tools/root/.ssh/id_rsa.pub
se le agregará. Si el último archivo tampoco existe, se generará automáticamente: encontrará la clave privada correspondiente que luego necesitará para iniciar sesión en initramfs /etc/initramfs-tools/root/.ssh/id_rsa
(o id_rsa.dropbear
en caso de que la necesite en formato dropbear). Los siguientes son los comandos para realizar los pasos respectivos manualmente:
Para crear una clave (en formato dropbear):
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
Para convertir la clave del formato dropbear al formato openssh:
/usr/lib/dropbear/dropbearconvert dropbear openssh \
/etc/initramfs-tools/root/.ssh/id_rsa.dropbear \
/etc/initramfs-tools/root/.ssh/id_rsa
Para extraer la clave 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 agregar la clave pública al archivo autorizado_claves:
cat /etc/initramfs-tools/root/.ssh/id_rsa.pub >> /etc/initramfs-tools/root/.ssh/authorized_keys
En caso de que quiera alguna de las interfaces para conseguir configurar mediante DHCP, la configuración
DEVICE=
en /etc/initramfs-tools/initramfs.conf
debería ser suficiente. El initramfs también debe honrar el ip=
parámetro del núcleo. En caso de que use grub, es probable que desee configurarlo /boot/grub/menu.lst
, ya sea en la # kopt=
línea ' ' o anexado a kernel
líneas específicas ' '. El ip=
parámetro del núcleo está documentado Documentation/nfsroot.txt
en el árbol de origen del núcleo.
Cuestiones
¡No olvide ejecutar update-initramfs
cuando cambió la configuración para que sea efectiva!
Recolectar suficiente entropía para el demonio ssh a veces parece ser un problema. El inicio del demonio ssh podría retrasarse hasta que se haya recuperado suficiente entropía. Esto no bloquea el proceso de inicio, por lo que cuando esté en la consola no tendrá que esperar a que sshd complete su inicio.
Procedimiento de desbloqueo
Para desbloquear desde el control remoto, puede hacer algo como esto:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" root@initramfshost.example.com \
"echo -ne \"secret\" >/lib/cryptsetup/passfifo"
Este ejemplo supone que tiene un known_hosts
archivo " ~/.ssh/known_hosts.initramfs
" adicional que contiene la clave de host del sistema cryptroot, que tiene un archivo " ~/id_rsa.initramfs
" que contiene la clave autorizada para el sistema cryptroot, que el nombre del sistema cryptroot es " initramfshost.example.com
", y que el la frase de contraseña de cryptroot es " secret
"
- < debian@x.ray.net
>, mié, 30 sep 2009
zless /usr/share/doc/cryptsetup/README.remote.gz