Cifrado de un directorio en Debian
Otra opción es la de cifrar todo un directorio. Para ello podemos usar el software de cifrado ecryptfs (paquete ecryptfs-utils).
eCryptfs es un sistema de ficheros cifrado que está integrado en el kernel Linux. Funciona de forma transparente sobre un sistema de ficheros como ext4, cifrando cada fichero de manera individual y con toda la información necesaria sobre el cifrado incluida en el propio fichero. Se podría coger un solo fichero cifrado, enviarlo a otro PC, y acceder a la información descifrada de ese fichero usando eCryptfs y la misma contraseña que en el origen.
Para usar eCryptfs es necesario instalar el paquete ecryptfs-utils:
# aptitude update
# aptitude upgrade
# aptitude install ecryptfs-utils
Una vez instalado, comprobamos si el módulo del kernel ecryptfs se ha cargado en memoria:
# lsmod | grep ecryptfs
y si no lo está, entonces reiniciamos el equipo o lo cargamos manualmente:
# modprobe ecryptfs
A partir de ahora podemos montar directorios con el sistema de ficheros ecryptfs:
# mount -t ecryptfs /directorio/original /directorio/cifrado
Por ejemplo:
# mkdir original
# mkdir cifrado
# mount -t ecryptfs original cifrado
Select key type to use for newly created files:
1) tspi
2) passphrase
Selection: 2
Passphrase:
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32
2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]:
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]:
Enable plaintext passthrough (y/n) [n]:
Enable filename encryption (y/n) [n]:
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=79e48485d1e7fb7a
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? : yes
Would you like to append sig [79e48485d1e7fb7a] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : yes
Successfully appended new sig to user sig cache file
Mounted eCryptfs
Durante el proceso de montaje tenemos que responder a una serie de preguntas:
- A la primera pregunta respondemos con la opción 2 para indicar que usaremos una contraseña para el cifrado.
- La segunda pregunta es para que introduzcamos la clave de cifrado.
- Posteriormente elegimos el algoritmo de cifrado, que por defecto es AES, y lo aceptamos pulsando la tecla ENTER.
- Aceptamos, pulsando ENTER, una longitud de clave de 16 bytes (128 bits).
- La quinta pregunta nos interroga sobre si queremos acceder a los ficheros no cifrados del directorio original a través del directorio cifrado. Pulsamos ENTER para aceptar la respuesta por defecto, que es NO. De este modo obtendremos un error de entrada/salida al trabajar con los ficheros de original desde cifrado.
- A continuación, se nos pregunta por si queremos que los nombres de los ficheros del directorio cifrado también se cifren y se vean con nombres ilegiblesmou desde el directorio origen. La opción por defecto es NO, lo cual aceptamos pulsando ENTER. En caso contrario, se nos preguntará la clave con la que cifrar los nombres de estos ficheros, que por defecto es la misma contraseña que dimos para el cifrado del contenido de los ficheros y normalmente no se suele cambiar para evitar confusiones entre claves.
- Ahora se nos pregunta si se procede al montaje, pues es la primera vez que lo hacemos. Respondemos yes.
- Se nos pregunta si queremos guardar la signatura de la contraseña en el fichero /root/.ecryptfs/sig-cache.txt, para así evitar la pregunta anterior en las sucesivas operaciones de montaje. Respondemos yes. Si después de responder yes, en un posterior montaje, nos volviera a aparecer la pregunta del punto 7, será debido a que hemos introducido erróneamente alguna de las contraseñas.
A partir de este momento, los ficheros que se creen en el directorio original se guardan sin cifrar y no podrán manipularse a través del directorio cifrado, y los que se creen a través del directorio cifrado, tendrán su contenido encriptado, y solo podría verse a través de un sistema de ficheros ecryptfs que se hubiese montado con la misma contraseña, da igual que esté en otro ordenador distinto.
# cat > original/f1.txt
uno
# cat original/f1.txt
uno
# cat cifrado/f1.txt
cat: cifrado/f1.txt: Error de entrada/salida
# cat > cifrado/f2.txt
dos
# cat cifrado/f2.txt
dos
# cat original/f2.txt
Texto ilegible
Si el directorio original ya existiera, su contenido previo seguirá estando sin cifrar.
El último paso a realizar después de trabajar con los ficheros de cifrado, será desmontar dicho directorio, y así los ficheros quedarán cifrados hasta que se vuelva a realizar el proceso de montaje, necesitándose para ello introducir la misma contraseña que se usó anteriormente.
# umount cifrado
Hasta ahora todo se ha hecho como usuario root, pues es el único que puede usar el comando mount. Para que todo lo anterior también lo pueda hacer cualquier usuario deberíamos configurar el comando sudo adecuadamente. Usaremos el comando visudo para añadir al fichero /etc/sudoers la siguiente línea:
usuario ALL=/bin/mount -t ecryptfs /home/usuario/* /home/usuario/*, /bin/umount /home/usuario/*
Con esto, estamos diciendo que el usuario usuario, sobre cualquier ordenador, puede ejecutar el comando mount y umount con los argumentos que se dan, por lo tanto, solo podrá montar el sistema de ficheros ecryptfs usando directorios de su home y además la ruta debe ponerse en formato absoluto para que se cumpla la sintaxis de la línea anterior.
Siguiendo el mismo ejemplo anterior:
$ mkdir original
$ mkdir cifrado
$ sudo mount -t ecryptfs ~/original ~/cifrado
Select key type to use for newly created files:
1) tspi
2) passphrase
Selection: 2
.......
.......
$ sudo umount ~/cifrado
En el comando mount se ha puesto en rojo los directorios que intervienen en el montaje, para que se observe que tras la expansión de ~ a /home/usuario, se está usando la sintaxis que en /etc/sudoers se le permite a usuario.
Es posible automatizar el uso de ecryptfs pasando las respuestas (opciones del montaje) mediante la opción -o de mount. Las opciones son:
Opción | Significado |
ecryptfs_cipher=algoritmo |
Especifica el algoritmo de cifrado a utilizar. Por ejemplo: ecryptfs_cipher=aes. |
ecryptfs_key_bytes=longitud |
Especifica la longitud de la clave (16, 24, 32 bytes). Por ejemplo: ecryptfs_key_bytes=16. |
ecryptfs_passthrough | Para acceder desde cifrado a los ficheros de original. También ecryptfs_passthrough=yes. |
ecryptfs_passthrough=no | Para no acceder desde cifrado a los ficheros de original. |
ecryptfs_enable_filename_crypto |
Para que los nombres de los ficheros de cifrado se encripten después de desmontarlo. También ecryptfs_enable_filename_crypto=yes |
ecryptfs_enable_filename_crypto=no | Para que los nombres de los ficheros de cifrado no se encripten después de desmontarlo. |
ecryptfs_fnek_sig=signatura | Para que los nombres de los ficheros de cifrado se encripten. Se especifica la signatura de la clave que se usará para el cifrado. Esta puede obtenerse a través de un primer montaje interactivo, como en el primer ejemplo, donde se muestra como signatura de la clave de cifrado el texto: 79e48485d1e7fb7a. |
no_sig_cache | No preguntará si queremos guardar la signatura de la clave en /root/.ecryptfs/sig-cache.txt. |
key=passphrase | Especificamos que usaremos una clave para el montaje, la cual se nos pedirá interactivamente. |
key=passphrase:passwd=clave | Especificamos que usaremos una clave para el montaje e indicamos en claro cuál es. Usar esta opción es poco seguro. |
key=passphrase:passfile=/directorio/fichero |
Especifica la clave del montaje a través de un fichero, el cual debe contener el siguiente texto: passphrase_passwd=clave El fichero no debería ponerse dentro del directorio cifrado. Una buena opción sería ponerlo en un lápiz USB que debería estar montado antes de que se monte el directorio cifrado. |
Por ejemplo:
$ sudo mount -t ecryptfs ~/original ~/cifrado -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=no,no_sig_cache,key=passphrase:passwd=hola
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=79e48485d1e7fb7a
Mounted eCryptfs
Si como root se quisiera hacer una automatización a través del fichero /etc/fstab, habría que poner la opción noauto si se nos va a pedir algún dato interactivamente, por ejemplo, la clave.
Aunque hasta ahora, hemos usado dos directorios, es posible usar solo uno, por ejemplo:
# mount -t ecryptfs cifrado cifrado
El paquete ecryptfs-utils instala también una serie de comandos (scripts) que simplifican el uso habitual con ecryptfs. Así, por ejemplo, si un usuario quiere utilizar un único directorio cifrado, dispone de los comandos: ecryptfs-setup-private, ecryptfs-mount-private y ecryptfs-umount-private.
El comando ecryptfs-setup-private crea, en el directorio casa del usuario que lo ejecuta, los directorios ocultos ~/.ecryptfs y ~/.Private y el directorio visible ~/Private:
$ ecryptfs-setup-private
Enter your login passphrase [usuario]:
Enter your mount passphrase [leave blank to generate one]:
Enter your mount passphrase (again):
************************************************************************
YOU SHOULD RECORD YOUR MOUNT PASSPHRASE AND STORE IT IN A SAFE LOCATION.
ecryptfs-unwrap-passphrase ~/.ecryptfs/wrapped-passphrase
THIS WILL BE REQUIRED IF YOU NEED TO RECOVER YOUR DATA AT A LATER TIME.
************************************************************************
Done configuring.
Testing mount/write/umount/read...
Inserted auth tok with sig [79e48485d1e7fb7a] into the user session keyring
Inserted auth tok with sig [c52b1c3149764fd9] into the user session keyring
Inserted auth tok with sig [79e48485d1e7fb7a] into the user session keyring
Inserted auth tok with sig [c52b1c3149764fd9] into the user session keyring
Testing succeeded.
Logout, and log back in to begin using your encrypted directory.
Durante su ejecución, nos pregunta por nuestra clave de inicio de sesión y por la contraseña de cifrado que habrá que introducirla dos veces.
A partir de este momento, cada vez que el usuario inicie una sesión en el sistema, se montará automáticamente el directorio oculto ~/.Private (el original) sobre el directorio ~/Private (el cifrado).
Es necesario que tras la ejecución del comando anterior, el usuario reinicie su sesión en el sistema para que se produzca automáticamente el montaje del directorio cifrado, o bien use el comando ecryptfs-mount-private para hacerlo manualmente:
$ ecryptfs-mount-private
Enter your login passphrase:
Inserted auth tok with sig [79e48485d1e7fb7a] into the user session keyring
Este comando pide la contraseña de inicio de sesión del usuario.
Si quisiéramos desactivar el montaje automático, debemos eliminar el fichero ~/.ecryptfs/auto-mount.
Cuando cerramos la sesión, se produce automáticamente el desmontaje del directorio cifrado. También, puede hacerse manualmente, en cualquier momento, usando el comando ecryptfs-umount-private.
$ ecryptfs-umount-private
Obra publicada con Licencia Creative Commons Reconocimiento 4.0