Cifrado de Partición Home con fscrypt

Hola, una de mis preocupaciones es mantener la información del disco duro del portátil de forma cifrada, y tras investigar explico como lo he realizado con éxito. Puede ser que utilizar Luks sobre Btfrs sea más avanzado y seguro para todo el disco, pero en principio con la partición home me sirve para este propósito.

He utilizado FSCRYPT es un cifrado actual desde el kernel para cifrar particiones (no disco) o directorios. Es el sistema de cifrado predeterminado también para Android y funciona a nivel de kernel. El inconveniente es que sólo funciona para ext4, f2fs, no para btrfs.

En mi caso tengo la partición formateada con ext4.

También tenemos la opción de ecryptfs, pero está menos mantenida y es menos actual, aunque si es compatible con btfrs ya que el tipo de cifrado es diferente.

Lo he realizado sobre una máquina con SlowRoll, aunque entiendo que con Tumbleweed debería funcionar perfectamente, Sobre todo, tener copias de seguridad por si hubiera cualquier problema.

En primer lugar, nos aseguramos que el kernel tenga activada la opción de cifrado a nivel de fichero.

zgrep -h CONFIG_FS_ENCRYPTION /proc/config.gz /boot/config-$(uname -r) | sort | uniq

Se debería ver CONFIG_FS_ENCRYPTION=y.

Después habilitamos encrypt en la partición home, la podemos localizar con lsblk -fs. Supongamos sdaX.

sudo tune2fs -O encrypt /dev/sdaX

Instalamos fscrypt y libpam-fscrypt para el uso con el inicio de sesión.

sudo zypper install fscrypt libpam-fscrypt

Iniciamos su configuración:

sudo fscrypt setup

Nos preguntará si / sea escribible solo por root, decimos que N porque no vamos a cifrar la raíz.

Configuramos un punto de montaje de fscrypt para home

sudo fscrypt setup /home

Nos preguntará si queremos que sea escribible por el resto de usuarios, decimos que sí

Cerramos la sesión del usuario para preparar el nuevo directorio, y accedemos a una TTY con Ctrl+Alt+F2. Iniciamos sesión como root.

Podemos copiar el directorio del usuario a un directorio temporal si queremos conservar los archivos.

sudo mv /home/miusuario /home/miusuario_bak

Crear el nuevo directorio cifrado para el usuario, otorgándole los permisos necesarios.

sudo mkdir /home/usuario
sudo chown usuario:usuario /home/usuario
sudo chmod go-rwx /home/usuario

Ahora, ciframos el nuevo directorio /home/usuario

sudo fscrypt encrypt /home/usuario --user=usuario

Preguntará como queremos proteger el directorio, seleccionamos la opción 1 - Your login passphrase (pam_passphrase)). Con esto se debería desbloquear de forma automática

Copiamos los datos al directorio cifrado

sudo rsync -avH /home/usuario_bak/ /home/usuario/

Podemos verificar el estado del cifrado con

fscrypt status /home/usuario

En el directorio habrá un fichero fscrypt_recovery_readme.txt con la clave de recuperación, guardarla en un lugar seguro por si tenemos que hacer uso de ella, esperemos que no !

Aquí es donde he tenido el único problema, al reiniciar e iniciar sesión, no se ha descifrado el directorio home automáticamente mostrándome una sesión vacía, He vuelto a salir al TTY, y para comprobar que el cifrado es correcto, ejecuto :

fscrypt unlock /home/usuario --user=usuario

Y veo que lo descifra correctamente, mostrando el contenido del directorio. por lo que suponqo que es debido a como openSuse maneja los datos de inicio de sesión. Tras investigarlo, he encontrado los ficheros que hay que configurar.

Los ficheros afectados para el arranque en mi caso han sido los siguientes,

/etc/pam.d/common-auth

/etc/pam.d/common-session

y añadir las lineas tal que así, para indicar que utilice fscrypt para desbloquear al loguearse, la señalo en el comentario.

auth    required        pam_env.so
auth    sufficient      pam_fprintd.so
auth    optional        pam_kwallet5.so
auth    required        pam_fscrypt.so   ## añadir esta línea
auth    required        pam_unix.so     try_first_pass 

Por último, si todo ha ido correcto, podemos eliminar la copia de seguridad.

sudo rm -rf /home/usuario_bak

Con esto ya me ha reiniciado con éxito y con el directorio home perfectamente habilitado.

Se agradece cualquier aclaración o ampliación por si hay un modo mejor o más seguro de hacerlo y por supuesto cualquier corrección de algún fallo por mi parte.

Saludos!

3 Likes

He visto que el método tenía un problema al desbloquear la pantalla, no cogía la contraseña por un problema en la cadena de auntenticación, hay que modificar los ficheros que he indicado con lo siguiente:
Para common-session

session required        pam_limits.so
session required        pam_loginuid.so  
session optional        pam_keyinit.so force revoke  
session optional        pam_fscrypt.so ## añadir aquí como opcional
session optional        pam_systemd.so
session required        pam_unix.so     try_first_pass 
session optional        pam_umask.so
session optional        pam_kwallet5.so
session optional        pam_env.so

para common-auth

auth    required        pam_env.so
auth    sufficient      pam_fprintd.so
auth    optional        pam_kwallet5.so
auth    optional        pam_fscrypt.so  nogroups try_first_pass ## añadido nogroups y try_first_pass
auth    required        pam_unix.so     try_first_pass 

Esto parece ser debido a como openSuse maneja los módulos pam.
Saludos !

1 Like

Interesante toda la explicación :heart_eyes_cat:, la leere con calma a ver si puedo aplicar algo, aunque todos mis discos los tengo con BTFRS.

Yo no me atreví a encriptar la /home y la / me dió problemas que no me pillaba la contraseña y cosas así. Opté por en otro disco encriptarlo entero y con enlaces simbólicos las carpetas de /home apuntarlas ahí. El inconveniente es que no me arranca automáticamente y cada vez que a inicio el sistema me toca iniciar el disco.

1 Like

Hola!, para btfrs si quieres un cifrado sencillo sólo de /home, puedes utilizar ecryptfs, que aunque es un método más antiguo y menos mantenido, todavía sirve para eso. Es hasta más fácil de configurar:

https://wiki.debian.org/TransparentEncryptionForHomeFolder

La forma que recomienda openSuse es a través de la instalación con YAST directamente, utilizando FIDO o el chip TPM, pero en mi caso no quería volver a realizar instalación completa. La próxima que lo haga seguro que utilizo este método:

https://news.opensuse.org/2024/09/20/quickstart-fde-yast2/