Cifrado con encfs y pam-encfs

De zerutek

Saltar a: navegación, buscar

26/08/2013

Directorio cifrado usando encfs. Automatización vía 'pam'.

Una forma rápida y sencilla de cifrar información, ya sea en máquinas locales o remotas. También se trata como implementar el módulo pam para estos menesteres.

encfs

Encfs es un sistema de cifrado de directorios en "espacio de usuario", utilizando fuse.

ventajas

  • Muy fácil de implementar y utilizar.
  • No necesitas tener espacio ni particiones reservadas para estos menesteres. Ocupa lo que utilizas

deventajas

  • No es realmente un sistema de ficheros. Hereda las características del sistema de ficheros donde se aloja.
  • Un usuario con permisos de lectura puede ver la fecha de modificación, el tamaño y los permisos de los ficheros cifrados.
  • No conserva la totalidad de los atributos de los ficheros, pudiendo provocar algunos problemas con aplicaciones (¿gnupg?).

Sistemas utilizados

  • Debian Lenny
  • Debian Squeeze
  • Debian Wheezy

Requerimientos en Debian

  • encfs
  • libfuse2 > 2.6
  • fuse-utils
  • libpam-encfs (en de querer configurar la autenticación pam)
  • El usuario debe formar parte del grupo 'fuse'

Creación del volumen cifrado

cd
mkdir .cifrado.encfs cifrado
encfs /home/usuario/.cifrado.encfs /home/usuario/cifrado

Al realizarse esta acción, se realizan unas preguntas (tipo de cifrado, tamaño de las claves, ...) antes de pedir la contrasña de cifrado. Para este ejemplo hemos usado el modo pre-configurado 'paranoia'.

Montaje de un volumen cifrado

encfs /home/usuario/.cifrado.encfs /home/usuario/cifrado

Tras esto pide la contraseña y monta el volumen

Desmontaje de un volumen cifrado

/usr/bin/fusermount -u /home/usuario/cifrado

Automatización a base de '.bashrc' y '.bash_logout'

Esto puede ser útil para máquinas remotas, donde no queramos instalar el módulo pam, o simplemnte no queramos conplicarnos la vida. Basta con añadir las lineas indicadas al final de los archivos.

.bashrc

/usr/bin/encfs -i 10 /home/usuario/.cifrado.encfs /home/usuario/cifrado

El parámetro '-i 10' es el tiempo de espera para desmontar el sistema, si no se utiliza.

.bash_logout

/usr/bin/fusermount -u /home/usuario/cifrado

pam y gdm

Para configurar la entrada vía 'pam', con todo el "home" del usuario cifrado, se requiere el módulo 'libpam-encfs'. En este ejemplo suponemos que tenemos creado, y con los permisos 'usuario:usuario' el directorio cifrado '/home/.usuario.enfs' y lo queremos montar en '/home/usuario'

/etc/fuse.conf

Autorizamos a los usuarios a montar directorios:

user_allow_other

/etc/security/pam_encfs.conf

Permitimos el montaje de el directorio cifrado de usuario sito en /home/.enc, en:

-		/home/.enc	- 		-v			allow_other

/etc/pam.d/gdm

Añadimos justo antes de "@include common-auth":

session required pam_encfs.so # Para que desmonte automaticamete
auth    required pam_encfs.so

Ponemos "required" en vez de "requisite", para que si introducimos mal la password de la unidad comprimida, no te loguees sobre el directorio vacío.

Con todo esto conseguimos que gdm nos pregunte dos veces por la password, una para la unidad comprimida, y otra para la password del sistema. Si un usuario no tiene unidad comprimida, puede ignorar la primera password.

pam y login por consola

Si deseamos que funcione todo esto al logearnos por consola, hay que realizar los mismos pasos en '/etc/fuse.conf' y '/etc/security/pam_encfs.conf', ademas de:

/etc/pam.d/login

Añadimos justo antes de "@include common-auth":

session required pam_encfs.so # Para que desmonte automaticamete
auth    required pam_encfs.so

pam y password iguales para el usuario y el sistema cifrado

Si deseamos tener la misma password para el usuario y el sistema de cifrado, o lo que es lo mismo, para sólo teclear una password, si esta coincide:

/etc/pam.d/common-auth

Añadir a la linea 'pam_unix.so', el parámetro 'try_first_pass'.

Con esto conseguimos que las password del primer módulo pam (pam_encfs.so) se reutilice en el segundo (pam_unix.so), por lo que las password de cifrado y sistema TIENEN que ser iguales. Los usuarios sin directorio cifrado no se ven afectados.

TODO

Posiblemente se pueda automatizar el cambio de contraseña del usuario y sistema cifrado simultanemente con '/etc/pam.d/passwd' y '/etc/pam.d/common-password', pero creo que por hoy es suficiente.

Referencias

https://help.ubuntu.com/community/EncryptedHomeDirectoryHowto

http://pam-encfs.googlecode.com/svn/trunk/README