Protegiendo con contraseñas un directorio en Linux

El día de ayer leí en el blog de Álvaro Felipe, un tutorial sobre como proteger con contraseña un directorio (carpeta) en Ubuntu, y bueno el método que propone no protege completamente el directorio, aún es posible para cualquiera con privilegios de root leer el contendio de dicha carpeta. Por qué esto es peligroso pues si alguien tiene acceso directo a nuestro PC y bootea el sistema usando un LiveCD o un LiveUSB, pues podrá montar nuestro disco y tener acceso a todo nuestros archivos. Una característica muy buena de Mac OS X es el FileVault, que permite incluso proteger a través de encriptación y password el contenido del directorio home del usuario.

Dado que Mac OS X es un Unix, pues en teoría debería ser posible hacer lo mismo en Linux, así que me puse a investigar y encontré que el método a utilizar sería usar un sistema de archivos loopback encriptado, la idea la he tomado de howto Loopback Encrypted Filesystem HOWTO. Sin embargo la he adaptado para su uso en Ubuntu, la razón de ello es que es bastante popular entre los usuarios que se han unido a la comunidad Linux en los últimos dos años.

Primero permitamente explicarles que ventajas se obtienen al hacer esto:

  1. Sin la contraseña utilizada al momento de la creación del filesystem, ni siquiere un usuario con privilegios root podría hacerlo.
  2. Cuando el archivo contenedor del sistema de archivos loopback se monta, todo el contenido que dejemos en él, es automáticamente encriptado usando el protocolo AES y esto es de forma transparente al usuario.
  3. Todo lo que es visible por el usuario root es sólo el archivo contenedor.

Lo que no hace este método es impedir que el usuario root borre el archivo contenedor, pero por otro lado si el usuario root lo desea puede hasta reparticionar toda la unidad haciendo inaccesible la información permanentemente, pero en teoría el usuario root es o debería ser el usuario más confiable.

Comencemos pues, primero debemos de cargar el módulo que permite el loopback encriptado, para ello usamos el comando:

user@host:~$ sudo modprobe cryptoloop

Para verificar si se ha cargado exitosamente ejecutamos el comando:

user@host:~$ lsmod | grep cryptoloop
cryptoloop              4352  1
loop                   18948  2 cryptoloop

Luego es conveniente verificar si el módulo AES esta cargado ya, para ello debemos de ejecutar este comando:

user@hots:~$ lsmod | grep aes
aes_i586               33536  1

Si no esta cargado, debemos proceder a cargarlo con el comando modprobe, pero en Ubuntu en su versión desktop ese módulo es cargado por defecto, sin embargo nunca esta demás asegurarnos.

Ahora debemos proceder a crear un archivo imagen vació, para luego agregarle la encriptación, para ello utilizamos los comandos:

user@host:~$ sudo dd if=/dev/urandom of=privado.img bs=1M count=100
user@host:~$ sudo losetup -e aes /dev/loop0 privado.img
Password:
[ponga aquí el password que más le guste]

El tamaño que le hemos asignado al contenedor es 100 MB, pero pueden variar el tamaño de acuerdo a sus necesidades con solo cambiar el parámetro count. Ahora debemos formatear la unidad lógica que ya tenemos creada, en lo personal he seleccionado el formato vfat para hacer fácil la asignación posterior de usuario y grupo al momento de montar la unidad, pero pueden seleccionar cualquier tipo de formato soportado por Linux es decir ext2, ext3, hfs, hpfs, ntfs, udf, etc.

user@host:~$ sudo mkfs -t vfat /dev/loop0

Ahora ya podemos montar/desmontar nuestro filesystem loopbak encriptado, para ello podemos usar los siguiente comandos para montar la unidad en un directorio de nuestro home:

user@host:~$ mkdir privado
user@host:~$  sudo mount -o loop,uid=1000,gid=1000,encryption=aes privado.img ~/privado
[sudo] password for user: 
[el password de super user de Ubuntu]
Password: [el password que seleccionó al momento de crear la unidad lookback]

  • nota:  uid=1000 y gid=1000 son por lo general el usuario y el grupo de usuario perteneciente a la cuenta creada al momento de instalar Ubuntu, si Ud. comparte el sistema y no fue el usuario que instaló Ubuntu puede averiguar su UID y GID revisando el archivo /etc/passwd

Ahora podrá ver y escribir sobre el directorio ~/privado como si se tratara de un directorio común y silvestre:

user@host:~$ cd privado
user@host:~/privado$ ls -la
total 20
drwxr-xr-x   2 user   user   16384 1969-12-31 19:00 .
drwxr-xr-x 139 user   user    4096 2009-02-25 09:09 ..
user@host:~/privado$ touch prueba.txt
user@host:~/privado$ ls -l
total 0
-rwxr-xr-x 1 user   user   0 2009-02-25 11:05 prueba.txt

Para desmontar la unidad, sencillamente debemos ejecutar estos comando:

user@host:~/privado$ cd
user@host:~$ sudo umount privado
user@host:~$ rm -rf privado

Borramos el directorio que usamos para montar la unidad sencillamente para mantener el orden en nuestro directorio home. Es posible que estos comandos sean puestos en un script y de esa forma automatizar el proceso de montaje/desmontaje del sistema loopback.

Cuando tengan desmontado su sistema loopback lo único que podría ver el usuario sería el archivo contenedor:

user@host:~$ ls -la privado*
-rw-r–r– 1 user   user   104857600 2009-02-25 09:05 privado.img

Espero que esta información les haya sido de utilidad sobre todo a aquellos usuarios que manejan información muy sencible y desean tenerla lo más protegida posible.

2 comentarios en «Protegiendo con contraseñas un directorio en Linux»

  1. Hola, muy interesante tu publicasion, una pregunta, tengo un directorio que quiero proteger y encritar de que manera podria hacerlo, ahy alguna manera de poder elegir lenguaje de encritacion ? saludos

    1. No entiendo bien tus preguntas. Pero, de acuerdo a lo que he podido entender, si tu directorio ya existe pues sencillamente sigue estos pasos descritos en este tutorial, crea un archivo de loop, montalo en un directorio temporal y mueve el contenido de tu directorio dentro del archivo de loop encriptado y luego desmonta el directorio temporal, y monta el archivo de loop en el nombre de directorio que te interesa.

      Recuerda que no puedes hacer que se monte automáticamente al momento de booteo porque requerira un password que tu debes proveer, asi que no lo pongas en /etc/fstab.

      Ahora si lo que estas buscando es un sistema de archivos encryptado, hay varios tutoriales para las distribuciones más populares en http://www.howtoforge.com.

      Respecto a elegir lenuajes de encriptación, no me queda claro que es lo que te interesa, si un lenguaje de programación con soporte para las librerias de encriptación o estas preguntando sobre cual protocolo de encriptación es más seguro, podrias clarificar un poco más eso.

      Gracias por leer mi blog.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.