Crear un disco virtual cifrado en GNU/Linux

Hace un tiempo, en otro ordenador, tuve un disco virtual cifrado en mi máquina GNU/Linux. Tenía ganas de ver si la manera de hacerlo había cambiado, y veo en la siguiente dirección un modo muy interesante de hacerlo, que incluso permite montar el disco virtual en una máquina Windows (por ejemplo, para poder llevar información sensible en un pendrive, como en mi caso, al ser profesor, podrían ser las notas de mis alumnos, cumpliendo así con la LOPD, al no sacar dicha información personal del centro en un soporte sin cifrar):

http://kailaspatil.blogspot.com.es/2009/08/encrypted-virtual-file-system-evfs.html

Para aportar algo sobre el artículo original, vamos a scriptear la creación del disco virtual con tres pasos:

  1. Crear un script para poder generar un disco virtual del tamaño que queramos.
  2. Crear otro script que nos permita montar un disco existente
  3. Crear un último script para desmontarlo

Script para generar el disco virtual

Con nuestro editor favorito vamos a crear un script que nos va a preguntar:

  • El nombre del fichero a crear
  • El tamaño (en MB) del disco virtual

El contenido del fichero (por ejemplo, create.sh) será:

#! /bin/bash

FILENAME=$1
SIZE=$2
dd if=/dev/urandom of="$FILENAME" bs=1M count=$SIZE
losetup /dev/loop0 "$FILENAME"
cryptsetup luksFormat -c aes -s 256 /dev/loop0
cryptsetup luksOpen /dev/loop0 krp
mkfs -t vfat /dev/mapper/krp
cryptsetup luksClose krp
losetup -d /dev/loop0

Algunas consideraciones:

  • Para ejecutar el script pasaremos dos parámetros: el nombre del fichero y el tamaño en MB.
  • Vamos a formatear en vfat, para poder montar la partición más adelante en una máquina con Windows, si nos interesa, pero podríamos usar otro sistema de archivos.
  • Vamos a usar cifrado AES 256, pero podríamos usar otro

Una vez guardado el fichero, le damos permisos de ejecución:

$ chmod u+x create.sh

Y lo ejecutamos (como superusuario, en el caso de Ubutu, el método habitual será con “sudo”):

$ sudo ./create.sh disk.img 100

Ahora tenemos listo un disco virtual de 100 MB y con formato VFAT en el fichero disk.img.

Montar el disco

Para montar el disco vamos a crear otro script (por ejemplo, mountvdisk.sh), con el siguiente contenido:

#! /bin/bash
FILENAME=$1
MOUNTPOINT=$2
losetup /dev/loop0 "$FILENAME"
cryptsetup luksOpen /dev/loop0 krp
mount /dev/mapper/krp "$MOUNTPOINT" -o rw,user,umask=0000

Las opciones del mount nos van a permitir que, una vez montada la partición, podamos utilizarla con cualquier usuario, sin necesidad de tener permisos de root.

Tras darle permisos de ejecución podremos montar nuestro fichero en el punto de montaje que queramos:

$ chmod u+x mountvdisk.sh
$ sudo ./mountvdisk.sh disk.img /mnt

Desmontar el disco

Una vez terminado el uso, querremos desmontar el disco virtual. Para ello crearemos y utilizaremos el script “umountvdisk.sh”:

#! /bin/bash
MOUNTPOINT=$1
umount "$MOUNTPOINT"
cryptsetup luksClose krp
losetup -d /dev/loop0

Y al igual que en los pasos anteriores:

$ chmod u+x umountvdisk.sh
$ sudo ./umountvdisk.sh /mnt

Montar el fichero en Windows

Si nos interesa montar el fichero desde Windows, basta con tenerlo en un lugar accesible (un pendrive, una unidad de red), e instalar el software FreeOTFE que podemos descargar de:

http://sourceforge.net/projects/freeotfe.mirror/

No lo he probado, pero por lo que dice el artículo que cito arriba, basta con hacer botón derecho, y montar el fichero como una unidad.

Mejoras y consideraciones

Los scripts que pongo arriba son sólo ejemplos. Se les podrían hacer varias mejoras como:

  • Utilizar otro dispositivo de loopback si loop0 está ocupado
  • Comprobar que los ficheros existan o no, pedir confirmación de sobreescritura si ya existen, o indicar que no se puede montar si no existen
  • Comprobar que se les pasan los parámetros necesarios en el orden correspondiente

Con respecto a las consideraciones, además de lo indicado arriba sobre que formateamos con vfat para poder utilizarlo después también desde Windows, pero que podríamos usar otro tipo de sistema de archivos, también indicar que el identificativo “krp” que aparece en algunos scripts lo podríamos cambiar por lo que queramos, siempre que sea consistente dentro de un mismo script.

Deja un comentario

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