Cada sistema es un compromiso entre seguridad y usabilidad.
En el NAS construido , había un problema grave: era imposible reiniciar el sistema sin estar en su lugar, lo que reducía el nivel de disponibilidad de datos.
Este problema no fue crítico, hasta el momento en que comenzaron a apagar la emergencia eléctrica: durante tres meses, dos veces durante varias horas. El UPS está diseñado para fallas a corto plazo y no debe funcionar con baterías durante más de media hora (aunque realmente es aproximadamente una hora), y con cada apagado de este tipo, para volver a encender el sistema, tuve que ir a otra ciudad.
Gracias a una pista de ValdikSS , este problema se ha resuelto. Pero ...
Necesitaba vinculación de interfaz y desbloqueo SSH remoto. Y no encontré un manual que se pueda hacer de inmediato para que funcione como lo necesito.
Por lo tanto, traigo mi versión de la solución con vinculación e IP dinámica, en la que el sistema se puede desbloquear, tanto local como remotamente.
Le recuerdo que para realizar esta configuración, debe tener acceso físico local al NAS y capacidades de arranque de respaldo.
Vinculación en initramfs
Dado que, en el NAS, dos interfaces se combinan en un canal, se decidió hacer esto también en el arranque.
De la pregunta "Uso de NFS-root con interfaces enlazadas" tomé el script. El artículo "Cómo administrar la vinculación de Linux sin ifenslave usando sysfs" ayudó a establecer la vinculación.
Primero debe incluir módulos en initramfs que se utilizan para operar la red. Esto se hace con el siguiente comando:
while read m _; do /sbin/modinfo -F filename "$m"; done </proc/modules | sed -nr "s@^/lib/modules/`uname -r`/kernel/drivers/net(/.*)?/([^/]+)\.ko\$@\2@p" >> /etc/initramfs-tools/modules
Ahora copie los dos scripts a /etc/initramfs-tools/scripts/
.
El primero es necesario para elevar las interfaces en la vinculación:
/ etc / initramfs-tools / scripts / init-premount / 00_bonding_init El segundo es desactivar la interfaz de enlace mientras continúa la carga:
/ etc / initramfs-tools / scripts / init-bottom / iface_down Si esto no se hace, la red no funcionará después del arranque.
No olvide dar permiso a los scripts para ejecutar:
chmod +x /etc/initramfs-tools/scripts/init-premount/00_bonding_init /etc/initramfs-tools/scripts/init-bottom/iface_down
Solo queda establecer las interfaces que se incluirán en la vinculación y los parámetros para obtener la dirección.
La dirección se obtendrá a través de DHCP, porque La vinculación tendrá el mismo MAC que después del arranque, porque el enrutador emitirá una IP fija y reenviará los puertos.
Obtengo las interfaces automáticamente de las que están incluidas en bond0
bond mientras se ejecuta el NAS:
sed -i "s/\(GRUB_CMDLINE_LINUX_DEFAULT=\)\"\(.*\)\"/\1\"\2 $(echo -n ip=:::::bond0:dhcp bondslaves=$(sed -e 's/ /,/' /sys/class/net/bond0/bonding/slaves))\"/" /etc/default/grub
Finalmente, actualice la configuración de GRUB y la imagen initramfs:
update-grub update-initramfs -u -k $(uname -r)
Eso es todo Si todo está configurado correctamente, después de reiniciar e iniciar el script de inicio en initrmafs, los pings en el NAS de IP desaparecerán, a pesar de que el sistema operativo aún no está cargado.
Observo que configurar la vinculación en Dracut se hace mucho más fácil, porque ya hay scripts en la entrega .
Servidor SSH en initramfs
Instale el paquete para habilitar Dropbear SSH en initramfs:
apt-get install dropbear-initramfs
Dropbear SSH se incluirá en initrmafs automáticamente, y comenzará si se genera al menos una interfaz de red con una dirección IP en una etapa temprana del arranque.
Después de eso, convierta la clave Dropbear al formato OpenSSH y ciérrela con una contraseña:
/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/dropbear/dropbear_rsa_host_key \ id_rsa dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key | \ grep "^ssh-rsa " > id_rsa.pub ssh-keygen -p -f id_rsa
La clave id_rsa
se id_rsa
en la máquina con la que se realizará el desbloqueo. ~/.ssh/dropbear
que se copiará en el ~/.ssh/dropbear
.
En /etc/dropbear-initramfs/authorized_keys
, se deben especificar las huellas digitales y los parámetros de cada clave.
Por ahora, solo agregue la huella digital de una tecla, para lo cual debe ejecutar el siguiente comando:
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock"' $(cat id_rsa.pub) >> /etc/dropbear-initramfs/authorized_keys
No se necesitan envoltorios mencionados en los artículos, /bin/unlock
- script del sistema (cryptroot-unlock).
Así es como debería verse /etc/dropbear-initramfs/authorized_keys
al final:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock" ssh-rsa AAAA...XDa root@nas
Actualice la configuración de GRUB y la imagen de initramfs y reinicie:
update-grub update-initramfs -u -k $(uname -r) reboot
Desde la máquina donde copió la clave, ahora es posible conectarse al NAS y desbloquear:
$ ssh -i .ssh/dropbear/id_rsa_initram -o UserKnownHostsFile=.ssh/dropbear/known_hosts root@nas.NAS.cloudns.cc Enter passphrase for key '.ssh/dropbear/id_rsa_initram': X11 forwarding request failed on channel 0 Please unlock disk root_crypt1 (/dev/disk/by-id/ata-Samsung_SSD_850_PRO_256GB-part3):
Después de eso, la consola recibirá constantemente un error sobre la ausencia de un argumento ( ash: -gt: argument expected
), pero se desbloqueará. Este es un error en el script de desbloqueo del sistema que no afecta nada (el error se corrige fácilmente, pero los envoltorios no lo resuelven).
Se pueden encontrar más detalles en estos artículos:
Depuración
Para la depuración, puede insertar una llamada a /bin/sh
en el script 00_bonding_init
después de:
case $1 in prereqs) echo "${PREREQS}"; exit 0;; esac
Cuando se resuelven los problemas de enlace, reemplace el command="/bin/unlock"
con command="/bin/sh"
en authorized_keys
.
Después de conectarse a través de SSH, se le presentará un shell que puede usar para la depuración.