Saltar la navegación

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.

ecryptfs

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 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) passphrase
 2) tspi
Selection: 1
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:

  1. A la primera pregunta respondemos con la opción 1 para indicar que usaremos una contraseña para el cifrado.
  2. La segunda pregunta es para que introduzcamos la clave de cifrado.
  3. Posteriormente elegimos el algoritmo de cifrado, que por defecto es AES, y lo aceptamos pulsando la tecla ENTER.
  4. Aceptamos, pulsando ENTER, una longitud de clave de 16 bytes (128 bits).
  5. La quinta pregunta nos interroga sobre si queremos acceder a los ficheros de texto 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.
  6. 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 extraños 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.
  7. Ahora se nos pregunta si se procede al montaje, pues es la primera vez que lo hacemos. Respondemos yes.
  8. 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 sólo 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
�(d����    �"3DUfw`�6:^���8@��� ^�_CONSOLEy䄅���z"�Af�9�iۯ�U���8h��,~���(H�KG��1W
                                                                                                      5���

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 contraseña.

# 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, sólo 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) passphrase
 2) tspi
Selection: 1
.......
.......
$ 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). Por ejemplo: ecryptfs_key_bytes=16.  
ecryptfs_passthrough Para ver desde cifrado los ficheros de texto de original.
ecryptfs_passthrough=no Para no ver desde cifrado los ficheros de texto de original.
ecryptfs_enable_filename_crypto=no   Para que los nombres de los ficheros de cifrado no se encripten.
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. Ésta 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:passwd=clave Especifica directamente la clave del montaje. 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 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 sólo 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

Licencia: licencia de software libre GPL