9.1.3.6.4. Cifrado de directorio

Esta estrategia permite cifrar un directorio entero, de modo que todo sobre lo que trabajemos dentro de él se almacenará cifrado de forma transparente. Se basa en el uso de un software intermedio (gocryptfs en nuestro caso) que, antes de almacenar datos en el sistema de archivos o tras leerlos de él, cifra o descifra la información.

../../../../_images/gocryptfs.png

En consecuencia:

  • Cifrado sobre el sistema de archivos definido para un directorio.

  • El cifrado es también independiente del sistema de archivos.

  • Sólo nos permite cifrar datos, no el sistema operativo completo.

Todo el software con este segundo enfoque se utiliza básicamente del mismo modo, de modo que pueden identificarse las siguientes operaciones básicas:

  • La creación del directorio cifrado, que exigirá el establecimiento de la clave simétrica de cifrado.

  • El montaje de dicho directorio introduciendo la clave; y el desmontaje.

  • El cambio de la clave.

Lo ilustraremos mediante gocryptfs, para cuya instalación debemos hacer:

# apt install gocryptfs fuse

Operativa manual

Es sumamente sencilla. Suponiendo que el directorio cifrado sea ~/cipher, podemos crearlo con:

$ gocryptfs -init ~/cipher

que nos pedirá interactivamente la contraseña (la clave simétrica) con que se cifrarán los datos. Con ella podremos realizar el montaje del siguiente modo:

$ gocryptfs ~/cipher ~/plain

lo cual mostrará dentro de ~/plain los contenidos descifrados, después de que facilitemos la clave. De esta forma, el usuario podrá trabajar de forma transparente sobre ~/plain, mientras el software se encarga de almacenar los datos cifrados dentro de ~/cipher. Al acabarse el trabajo, puede desmontarse el directorio:

$ fusermount -u ~/plain

Puede, además, modificarse la clave simétrica de cifrado (incluso cuando el directorio está montado):

$ gocryptfs -passwd ~/cipher

Operativa automatizada

Lo óptimo y cómodo, cuando se desea que los usuarios tengan la posibilidad de tener un directorio cifrado, es que las operaciones se hagan de modo automático, de manera que al acceder al sistema el usuario tenga montado el directorio que da acceso a los datos sin cifrar y que al dejarlo, se produzca el desmontaje. Para lograrlo puede plantearse la siguiente estrategia:

  1. En la medida en que el usuario no opera sobre el directorio cifrado, se lo ocultaremos anteponiendo a su nombre un punto. Por tanto, en vez de llamarlo ~/cipher lo llamaremos, por ejemplo, ~/.Cifrado. Al directorio que muestra los datos en claro, le daremos el mismo nombre pero sin anteponer el punto (~/Cifrado).

  2. Haremos que la clave de cifrado coincida con la contraseña de usuario, lo cual propicia que durante el proceso de autenticación con PAM podamos usar la contraseña introducida para montar automáticamente el directorio.

Establecido esto, basta con escribir un script que se encargue de hacer estas operaciones, cuyo código se enlaza y dejarlo en /usr/local/bin/mgocryptfs:

# mv /patH/donde/este/mgocryptfs /usr/local/bin
# chmod +x /usr/local/bin/mgocryptfs

y preparar PAM para que se ejecute al abrir y cerrar sesión en el sistema. La forma más limpia de hacerlo es creando un plugin de configuración como éste que puede habilitarse del siguiente modo:

# mv /path/donde/este/pam-gocryptfs /usr/share/pam-configs
# pam-auth-update

El script, además, incluye un aspecto accesorio más: sólo afecta a los usuarios que pertenezcan al grupo crypto, de modo que si queremos que un usuario monte automáticamente un directorio para guardar cifrados los datos, necesitaremos antes haberlo incluido en este directorio.

Por último, está el problema del cambio de contraseña. Tal y como está configurado por defecto, cuando un usuario del grupo crypto accede al sistema y no tiene directorio de cifrado, éste se crea utilizando la contraseña de acceso. En consecuencia, contraseña y clave de cifrado coinciden y todo funciona correctamente. Ahora bien, si se nos antoja cambiar nuestra contraseña, la clave de cifrado seguirá siendo la antigua, por lo que para que el montaje automático continúe funcionado, también deberemos cambiar la clave de forma separada. Para ello podemos crear un script que haga de envoltorio a la orden que usemos para cambiar la contraseña. Por ejemplo, si es passwd, una posible solución (no demasiado elegante, todo sea dicho) es ésta.