Recién instalé Ubuntu 22.04 y utilicé la opción de cifrado de disco completo ZFS+LUKS del instalador.
He estado buscando en la web una manera de configurar la unidad para que se desbloquee automáticamente al arrancar cuando se detecta una llave USB (clave de desbloqueo LUKS en la memoria USB) en lugar de ingresar una frase de contraseña de descifrado cada vez que inicio el sistema.
He encontrado toneladas de guías, pero ninguna de sus instrucciones parece ser aplicable a la forma en que 22.04 establece las estructuras de partición en la unidad cuando se usan ZFS y LUKS.
La guía más cercana que estoy siguiendo está aquí: https://tqdev.com/2022-luks-with-usb-unlock
Todo parece ir bien, hasta que llego al punto en el que tengo que agregar la clave a la unidad LUKS (paso seis), porque dos unidades figuran como unidades LUKS.
root@bob-home-linux:~# sudo blkid --match-token TYPE=crypto_LUKS -o device
/dev/sdc2
/dev/zd0
¡No estoy seguro de cómo proceder desde aquí!
Respuesta1
Actualización: 20 de marzo de 2024:Cuando ubuntu realiza una versión puntual (por ejemplo: 22.04.3 > 22.04.4), estos cambios se restablecen y requieren rehacer el paso 13 y el paso 20 nuevamente.
Instale el escritorio Ubuntu 22.04 usando ZFS y cifrado usando el instalador de Ubuntu. Asegúrese de registrar la frase de contraseña de cifrado de forma segura para utilizarla en un paso posterior. No configuré una clave de recuperación en el instalador, por lo que no sé si estos pasos funcionan cuando uso una clave de recuperación. YMMV.
Después de la instalación, formatee una unidad USB y cree una nueva partición usando el estándar ext4 (yo usé la utilidad de discos en Ubuntu). Llame a la partición 'linux-key'.
Asegúrese de que la unidad USB esté montada. Utilice la aplicación 'archivos' para verificar que el USB esté montado en la columna izquierda de la ventana de archivos.
Inicie una terminal y escriba los siguientes comandos para cambiar a root y luego a la unidad USB:
sudo su cd /media/<yourusername>/linux-key ls -la
Debería aparecer una lista de directorio vacía que muestre que la unidad USB está vacía.
root@ubuntu:/media/bob/linux-key$ ls -la total 29 drwx------ 3 bob bob 4096 Jan 25 15:07 . drwxr-x---+ 3 root root 3 Jan 25 15:08 .. drwx------ 2 root root 16384 Jan 25 15:07 lost+found
Escriba lo siguiente para mostrar las particiones LUKS en su sistema. La partición predeterminada que debemos modificar suele ser /dev/zd0. Asegúrese de que se muestre al ejecutar el siguiente comando.
$ blkid --match-token TYPE=crypto_LUKS -o device /dev/sdc2 /dev/zd0
Cree el nuevo archivo de clave de cifrado.
dd if=/dev/urandom bs=1 count=256 > linux.key
Asegúrese de que el archivo de claves exista; debería ver el archivo en la lista.
$ ls -la -rw-rw-r-- 1 root root 256 Jan 25 15:10 linux.key
Configure el archivo de claves para que funcione con la partición, luego ingrese la frase de contraseña de descifrado configurada anteriormente en el instalador.
cryptsetup luksAddKey /dev/zd0 linux.key
Verifique la inserción exitosa de la clave asegurándose de que la ranura de clave 1 esté completa.
cryptsetup luksDump /dev/zd0;
... Area offset:32768 [bytes] Area length:258048 [bytes] Digest ID: 0 1: luks2 <------------- the key you just added Key: 512 bits Priority: normal Cipher: aes-xts-plain64 Cipher key: 512 bits PBKDF: argon2id ...
Ajustar los permisos del archivo clave
chmod 400 linux.key
A continuación, navegue hasta la carpeta de scripts initramfs y abra el archivo llamado 'zfs'. Puede utilizar cualquier editor de texto que desee. (Estoy usando
nano
en este ejemplo)cd /usr/share/initramfs-tools/scripts nano zfs
Busque la siguiente línea y reemplácela con el siguiente texto.
Encuentra esta línea
echo "keystore-${pool} ${ks} none luks,discard" >> "${TABFILE}"
Reemplazar con esto
echo "keystore-${pool} ${ks} none luks,discard,tries=10,keyscript=/scripts/usb-unlock" >> "${TABFILE}"
Guarde y cierre el archivo.
Cree un nuevo archivo llamado 'usb-unlock' en el mismo directorio.
nano usb-unlock
Pegue el script de esta esencia: esto busca una partición de unidad USB llamada 'linux-key', busca un archivo llamado linux.key e intenta usarlo para descifrar la partición.
Guarde y cierre el archivo.
Ajustar los permisos para el script de desbloqueo USB
chmod 755 usb-unlock
Enumere el directorio del script. Asegúrese de que los dos archivos con los que acaba de trabajar pertenezcan al usuario root con un conjunto de permisos 755.
$ ls -la # you should see these files... -rwxr-xr-x 1 root root 550 Dec 22 20:38 usb-unlock -rwxr-xr-x 1 root root 31665 Dec 22 20:40 zfs
Finalmente, actualice initramfs para que ejecute el script cuando inicie.
update-initramfs -u
Reinicie su máquina, asegurándose de que la unidad USB esté insertada. Si está insertado, no debería necesitar escribir su contraseña de descifrado. Si falta, el script volverá a pedirle una frase de contraseña que deberá escribir.
Respuesta2
Es una "magia" oculta en initramfs, en el paquete zfs-initramfs
para ser exactos.
Busque en /usr/share/initramfs-tools/script/zfs y busque la siguiente línea:
# Open and mount luks keystore for any pools using one
El comportamiento es el siguiente:
Después de importar el grupo (por ejemplo, rpool
), el volumen no cifrado (zvol) que contiene está disponible como /dev/zvol/rpool/keystore
.
Este dispositivo zvol todavía está cifrado.
Las entradas de crypttab para esos zvols cifrados con luks ( zfs list -t volume
) se crean sobre la marcha durante el tiempo de arranque en /cryptroot/crypttab.
Luego, el usuario solicita las frases de contraseña para esas entradas.
Luego, los dispositivos se desbloquean y se montarán sin cifrar en /run/rpool/keystore
.
Dado que el rpool en sí está cifrado y su ubicación de clave apunta a esta ubicación, se puede cargar la clave para rpool y continuar con el proceso de inicio.
Probablemente alguien debería documentarlo adecuadamente;)
En cuanto a su pregunta original, podría intentar modificar el comportamiento con los posibles puntos de expansión para initramfs para /etc/initramfs-tools/scripts/local-*/
hacer lo mismo y montar el zvol usted mismo con la frase de contraseña de su dispositivo USB o proporcionar la clave para rpool de alguna manera directamente.