Crear partición virtual cifrada

Utilizando loopback crearemos una partición virtual cifrada, la cual nos puede ser de utilidad para, por ejemplo, guardar información privada en un portátil y evitar que caiga en malas manos si éste es sustraído.

Para ello, deberemos crear primero el archivo, y acto seguido montarlo en el loopback pero cifrando su contenido. A continuación daremos formato a la unidad loop, unidad que quedará asociada a nuestro archivo. Por último montaremos la unidad, dejándola preparada en el fstab.

Para este tutorial, he utilizado el algoritmo de cifrado serpent. Podemos saber qué algoritmos están disponibles en nuestro kernel, ejecutando el siguiente comando:

# modinfo /lib/modules/'uname-r'/kernel/crypto/*

donde 'uname-r' habrá que sustituirlo por el kernel que monta el sistema.

No obstante, existe otro método usando 'fuse-utils' y 'encfs'; este método consiste en montar un carpeta sobre otra carpeta, pero cifrada. La principal ventaja de este método es que no tiene un tamaño fijo.

Método 1 - Usando loopback

Para este ejemplo descargamos, si no están instalados, los siguientes paquetes

# aptitude install cryptsetup reiserfsprogs

y cargamos los siguientes módulos del kernel

# modprobe loop
# modprobe serpent
# modprobe dm-crypt

Como root, desde nuestro '/home/usuario' ejecutamos

# dd if=/dev/urandom of=.oculto bs=1M count=699

De esta forma hemos creado un archivo oculto llamado '.oculto' de 699 megas de datos aleatorios. Con el parámetro /dev/urandom le estamos indicando que genere datos al azar.

# losetup -e serpent /dev/loop0 /home/usuario/.oculto

Aquí asociamos el archivo de bloque con el tipo de cifrado, serpent en este caso, de tal forma que queda apuntando al archivo '.oculto'.
El comando 'losetup' es ejecutado en el directorio donde se ha creado el fichero '.oculto'; en este caso en nuestro home.
Se nos pedirá entonces una contraseña, la cual usaremos para montar el sistema cifrado (¡¡cuidado de no olvidarla!!).

# mkreiserfs /dev/loop0

Aquí daremos formato a la unidad loop (en el ejemplo he optado por reiserfs ya que quitará muy pocos megas del archivo cifrado para montar el sistema journal).

Procedemos a montar el sistema de archivos cifrado en la carpeta Privado:

# mkdir /mnt/Privado
# mount -t reiserfs /dev/loop0 /mnt/Privado

En este punto se nos pedirá la contraseña que previamente habíamos asignado.

Llegados aquí, podremos guardar archivos dentro del directorio '/mnt/Privado', bien haciendo un 'cp' o bien un 'mv'.

Si quisieramos desmontar el directorio, haríamos :

# umount /mnt/Privado
# losetup -d /dev/loop0

El 'umount ' habría que ejecutarlo desde fuera del directorio /mnt/Privado.

Una vez que el sistema de archivos cifrado ha sido montado, crearemos en '/root' un par de "bash alias" para que sea más fácil montarlo y desmontarlo;

Alt+F2
kdesu kwrite /root/.bashrc

y añadimos las siguientes líneas, tal cual:

alias montar='losetup -e serpent /dev/loop0 /home/usuario/.oculto; mount -t reiserfs /dev/loop0 /mnt/Privado'
alias desmontar='umount /mnt/Privado; losetup -d /dev/loop0; sync'

Para montarlo:

# montar

E ingresar la contraseña; de introducir la contraseña equivocada, el montaje fallará y habrá que quitar el archivo de bloque usando losetup -d /dev/loop0 comenzando de nuevo.

Para desmontarlo y deshabilitarlo:

# desmontar

Por último, lo dejaremos todo preparado en el fstab

Alt+F2
kdesu kwrite /etc/fstab

añadiendo a éste

/home/usuario/.oculto /mnt/Privado reiserfs noauto,user,loop=/dev/loop0,encryption=serpent

y haremos que los módulos utilizados carguen (si es que no lo hacen) nada más arrancar el ordenador.

Alt+F2
kdesu kwrite /etc/modules

añadiendo al final

dm-crypt
serpent
loop

También podemos automatizar el proceso introduciendo la pareja de “bash alias” en '/home/usuario/.bashrc'. Ahora bien, tendremos que jugar entonces con los permisos de acceso a un objeto asociado a un usuario o grupo de usuarios, utilizando ACL.

Como colofón a este método, vamos a guardar el contenido de nuestro archivo cifrado en un CD; de esta manera podremos transportar nuestra información privada sin tener que llevarla junto al ordenador.

Para ello abrimos nuestro “tostador favorito” y generamos una imagen ISO9660 con el archivo '.oculto' , en un cd. Así tendremos un fichero con un sistema de archivos reiserfs y completamente cifrado, el cual solo podrá ser leído por un sistema preparado para ello y que además conozca la clave de cifrado.

Una vez tostado el archivo procedemos a su montaje:

# mkdir /mnt/cdprivado

Añadiendo a '/etc/fstab' lo siguiente:

/dev/cdrom /mnt/cdprivado reiserfs noauto,user,loop=/dev/loop0,encryption=serpent

Donde '/dev/cdrom' es donde yo tengo localizado el dispositivo cdrom.

De esta manera al introducir en la bandeja un CD encriptado con serpent haremos:

# mount /mnt/cdprivado

Introducimos el password...

# cd /mnt/cdprivado

y ya estaremos dentro del CD.

Para desmontarlo, tan solo ejecutaremos fuera del directorio '/mnt/cdprivado'

# umount /mnt/cdprivado

Método 2 - Usando fuse y encfs

La ventaja de este método es que no crea un espacio de tamaño específico, si no que usa el espacio en disco disponible.
Primero, necesitaremos un par de paquetes para apoyarnos, podemos instalarlos con apt:

# apt-get install fuse-utils encfs

Una vez instalados, necesitamos ver si el módulo fuse está cargado:

# modprobe fuse

Para hacer que se cargue automáticamente agregamos al final del archivo /etc/modules Puedes hacer con tu editor favorito (nano, vi, gedit) y debes hacerlo como root.

fuse

Una vez que el modulo esté cargado, debemos pertenecer al grupo fuse para poder usar este modulo. Puedes verificar si perteneces al este grupo con el comando:

groups

En caso de no pertenecer, será tan fácil como ejecutar:

# adduser MIUSUARIO fuse

Reemplazando MIUSUARIO por tu nombre de usuario.

Ahora, crearemos dos carpetas, una para guardar la información que se va a cifrar y otra para montar esta carpeta.

mkdir /home/gatuno-123/datoscifrados
mkdir /home/gatuno-123/montaje

Cambia /home/gatuno-123 por tu respectiva home

Ahora hay que montar el sistema de archivos usando encfs:

encfs /home/gatuno-123/datoscifrados /home/gatuno-123/montaje

Les mostrará lo siguiente:

Creando nuevo volumen cifrado.
Por favor, seleccione una de las siguientes opciones:
introduzca "x" para modo de configuración para expertos,
introduzca "p" para el modo preconfigurado paranoico,
cualquier otra cosa (o una línea vacía) seleccionará el modo estándar.
?>

Introduzcan un Enter para seguir con la configuración estándar.

Configuración estándar seleccionada.

Configuración finalizada. El sistema de archivos que se va a crear tendrá las siguientes propiedades:
Cifrado del sistema de archivos: "ssl/aes", versión 2:1:1
Codificación de nombres de archivos: "nameio/block", versión 3:0:1
Tamaño de clave: 192 bits
Tamaño de bloque: 1024 bytes
Cada archivo contiene una cabecera de 8 bytes con datos únicos del IV.
Los nombres de archivos se codificarán usando el modo de encadenamiento de IV.

A continuación se le pedirá una contraseña para el sistema de archivos.
Debe recordar esta contraseña, ya que no existe absolutamente ningún mecanismo de recuperación. No obstante, la contraseña puede cambiarse después con encfsctl.

Nueva contraseña EncFS:
Verifique la contraseña EncFS:

Al final les preguntará por una contraseña para el sistema cifrado. Deberán escribirla dos veces. Es muy importante no olvidarla, porque no hay ninguna forma de recuperarla. Si la llegan a olvidar sus datos quedarán cifrados para siempre.

Agreguen los archivos que quieran a la carpeta montaje. Luego, para probar si funcionó desmonten el sistema con:

fusermount -u /home/gatuno-123/montaje

La carpeta montaje estará vacía. Pero la carpeta datoscifrados no, tendrá tantos archivos como ingresaron, pero cifrados y no son accesibles.

Para volver a acceder a los archivos, monta con:

encfs /home/gatuno-123/datoscifrados /home/gatuno-123/montaje

Y te pedirá la contraseña. Mueve los archivos al directorio /home/gatuno-123/montaje y luego de desmontar el directorio quedaran inaccesibles para los extraños, cualquiera que sea el sistema operativo con el que quieran acceder.