Cifrando de datos con EncFS

Cifrando de datos con EncFS

Hoy os voy hablar de una herramienta que permite cifrar nuestros datos.
Existen dos maneras de cifrar nuestros datos:

A nivel de bloque, protegerá el sistema siempre que esté apagado. En el arranque, el disco se montará y, una vez iniciado el sistema operativo, no estará cifrado. Debe hacerse en el proceso de instalación del sistema.
A nivel de sistema de archivos, en este caso, ciframos los directorios y archivos, después de la instalación del sistema. Presenta la ventaja de poder utilizarlo de forma selectiva y, aunque el sistema esté arrancado, no tienen por qué estar descifrados ciertos datos. Podemos hacer copias de seguridad, sin necesidad de descifrar el contenido. Como desventaja, dejamos ver algunas características del contenido cifrado, como la cantidad de archivos que hay en un directorio, estructura y tamaño de archivos.

Una buena idea para un cifrado completo, es utilizar cifrado a nivel de bloque para el sistema  y, a nivel de sistema de archivos, para los datos de usuario. Algunos sistemas, como Ubuntu, permiten, desde el instalador, cifrar el sistema con dm-crypt y, para los usuarios, realizar un cifrado de su home con eCryptfs (herramienta similar a la que vamos a ver aquí).
Empezamos:
EncFS, es una herramienta para cifrar datos a nivel de sistema de archivos, que no necesita privilegios de root para ser usada. Utiliza FUSE para montar los directorios cifrados y acceder a su contenido. Está disponible en la mayor parte de distribuciones GNU/Linux y, además, es posible utilizar en otros sistemas, como Windows.
Sin embargo, eCryptfs forma parte del núcleo Linux, lo que, según sus autores, permite que sea más rápida. Esto, en teoría, debe ser así, pues no hay que hacer cambio de contexto entre el kernel y el espacio de usuario.
Cifrando nuestros datos
Vamos a instalar encfs en nuestra Archlinux:

sudo pacman -Sy encfs

Ahora vamos a crear el directorio cifrado e indicaremos dónde vamos a montarlo descifrado:

encfs ~/.prueba ~/prueba

No podemos utilizar rutas relativas. Una vez ejecutado el comando anterior, nos pedirá el modo de cifrado y la contraseña:

[mary@archninfa ~]$ encfs ~/.prueba ~/prueba
El directorio “/home/mary/.prueba/” no existe. ¿Deberia ser creado? (s,n) y
El directorio “/home/mary/prueba” no existe. ¿Deberia ser creado? (s,n) y
Creando nuevo volumen cifrado.
Por favor, elige una de las siguientes opciones:
pulsa “x” para modo experto de configuracion,
pulsa “p” para modo paranoia pre-configurado,
cualquier otra, o una linea vacia elegira el modo estandar.
?> p
Seleccionada configuración Paranoica.
Nueva contraseña Encfs:
Verifique la contraseña Encfs:

El método estándar es muy seguro y utiliza por defecto los siguientes valores:

Cipher: AES
Key Size: 192 bits
PBKDF2 with 1/2 second runtime, 160 bit salt
Filesystem Block Size: 1024 bytes
Filename Encoding: Block encoding with IV chaining
Unique initialization vector file headers

El método paranoia, el que he utilizado, es todavía más seguro, pero impide la utilización de “enlaces duros”, lo que puede hacer que algunas aplicaciones fallen, como es el caso de mutt. Sus valores son:

Cipher: AES
Key Size: 256 bits
PBKDF2 with 3 second runtime, 160 bit salt
Filesystem Block Size: 1024 bytes
Filename Encoding: Block encoding with IV chaining
Unique initialization vector file headers
Message Authentication Code block headers
External IV Chaining

La herramienta nos ha creado dos directorios. El primero, .prueba, es el que contiene los datos. El segundo, prueba (sin el ‘.’), es donde veremos los datos descifrados. Ahora, para utilizarlo, tan sólo debemos copiar aquello que deseemos cifrar dentro de prueba. Automáticamente, será cifrado en .prueba.
Para desmontar el directorio, bastará ejecutar:

fusermount -u ~/prueba

Debemos tener en cuenta que, el directorio donde vamos a montar, debe estar vacío. Los archivos que copiemos directamente al directorio donde están alojados los archivos cifrados, no serán visibles en el punto de montaje.
Si queremos cambiar la clave, podremos hacerlo ejecutando:

encfsctl passwd ~/.prueba

Todo esto, lo hemos realizado mediante línea de comandos. Por supuesto, existen GUIS para esta herramienta. Con ellas, podremos hacer todo lo anterior desde un entorno gráfico, de manera más cómoda:

CryptKeeper: Es un icono para la bandeja de sistema, que nos permite crear, modificar y montar/desmontar directorios cifrados, para entornos GTK.
kde-servicemenus-encfs: Es un servicio para Dolphin/Konqueror, que nos permite crear y montar/desmontar directorios cifrados, desde el menú del navegador de archivos.
Kencfs: Es una aplicación, similar a las anteriores. También tiene su icono para la bandeja de sistema.

Estas herramientas se encuentra en el AUR, así que podemos utilizar yaourt para instalarlas (o cualquier otra herramienta que nos permita acceder al AUR) o descargarlas y crear el paquete.
Si queremos que los directorios cifrados se monten automáticamente al iniciar la sesión, tendremos que utilizar pam_encfs. Antes de nada, instalemos:

yaourt -Sy pam_encfs

O bien:
wget https://aur.archlinux.org/packages/pa/pam_encfs/pam_encfs.tar.gz
tar -xzf pam_encfs.tar.gz
cd pam_encfs
makepkg -si
cd ..
rm -r pam_encfs*

La configuración de pam_encfs se encuentra en el archivo /etc/security/pam_encfs.conf. En encfs_default, añadimos las opciones por defecto. La opción idle=1, desmontará los directorios automáticamente, tras un minuto de desuso. Es útil, junto con la opción ondemand, que montará el directorio bajo demanda. Abría que utilizar extpass para indicar qué programa vamos a utilziar para solicitar la clave. Si vamos a cifrar el home completo, es mejor no utilizar idle por defecto, así que, podemos comentar estar opición, anteponiendo una #:
#encfs_default –idle=1
Al final del archivo, añadimos nuestro directorio. En este caso, para continuar con el ejemplo:

#USERNAME SOURCE                      TARGET PATH            ENCFS Options  FUSE Options
mary      /home/mary/.prueba          /home/mary/prueba     -v               allow_other

Indicamos el usuario, el directorio cifrado, dónde lo vamos a montar, modo verbose (para ver la salida) y las opciones FUSE (allow_other permite el acceso al punto de montaje a todos usuarios, según los permisos del sistema de archivos; allow_root solo permite acceso al usuario que montó y al root).
Para poder utilizar allow_other, es necesario que que la opción user_allow_other esté descomentada en /etc/fuse.conf. Además, hay que tener en cuenta el contenido de fuse_default, en /etc/security/pam_encfs.conf, porque, al montar, utiliza estas opciones, más las que encuentre en FUSE Options. Dado que, allow_ root y allow_other, no se pueden utilizar a la vez, nos dará un error y no se podrá montar.
Los gestores de login gráficos, como KDM y GDM, utilizan /etc/pam.d/system-auth para controlar las credenciales. Editamos el archivo y añadimos lo siguiente:


auth      sufficient pam_encfs.so

auth      required   pam_unix.so     try_first_pass nullok

session   required  pam_encfs.so

En el caso de iniciar sesión en un terminal, el archivo a tener en cuenta es /etc/pam.d/login:

. .
auth            required        pam_securetty.so
auth            requisite       pam_nologin.so
auth            sufficient      pam_encfs.so
auth            required        pam_unix.so nullok try_first_pass

. . .
#Si vamos a iniciar sesión con login gráfico, NO añadir la línea siguiente
#al cerrar sesión en la terminal, intentará cerrar aunque tengamos alguna
#sesión gráfica abierta
#session         required        pam_encfs.so

Ya hemos visto cómo crear un contenedor cifrado y añadir dentro de él aquello que queramos cifrar. Además, hemos vismo cómo hacer que se monte el contenedor en el inicio de sesisón, automáticamente. Ahora, vamos a a provechar todo esto, para cifrar el home de un usuario y que se abra de manera automática al iniciar sesión.
Primero, vamos a crear un directorio, que será el que contendrá los contenedores de los home, cifrados:
sudo mkdir /home/.private
sudo chmod og-rw /home/.private
Al quitar los permisos de lectura/escritura, pero no de ejecución, prevenimos que se pueda listar el contenido del directorio, pero no el acceso al mismo. Así podremos acceder a nuestro contendor.
Creamos el contenedor:

encfs ~/nombre_usuario ~/temporal
fusermount -u ~/temporal
sudo mv ~/nombre_usuario /home/.private
rm -r ~/temporal

Lo siguiente será:

Realizar un backup de los datos.
Crear el punto de montaje.
Restaurar los datos.

cd /home
sudo mv nombre_usuario nombre_usuario.backup
sudo mkdir nombre_usuario
sudo chown nombre_usuario:grupo_usuario nombre_usuario
encfs /home/.private/nombre_usuario /home/nombre_usuario
sudo mv nombre_usuario.backup/* nombre_usuario.backup/.* -t nombre_usuario

Ahora, vamos a indicar a pam_encfs que monte, para todos los usuarios que tengan el home cifrado, en su lugar correspondiente. Editamos /etc/security/pam_encfs.conf y añadimos:

#USERNAME       SOURCE                    TARGET        ENCS Options      FUSE Options
–               /home/.private             –            -v                allow_other

El – en username, se sustituye por nombre de usuario que inicia sesión. Al ponerlo, el campo SOURCE se sustituye por ruta+usuario.  En el campo TARGET, si es – sustituye por la ruta del home del usuario.
De esta manera, podemos tener el home de los usuarios cifrado, y se montará automáticamente en el inicio de sesión. Muy útil en sistemas multiusuario.
¡Espero que os haya gustado!
Un saludo!!
Mª José Montes – mjose@highsec.es – @MMontesDiaz

http://highsec.es/2014/03/cifrando-de-datos-con-encfs/

Anuncios
Esta entrada fue publicada en Linux, Security. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s