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:
- Crear un script para poder generar un disco virtual del tamaño que queramos.
- Crear otro script que nos permita montar un disco existente
- 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.