17 oct 2012

Cifrar particiones con Cryptsetup and Luks

Como se ha comentado en múltiples ocasiones mantener la información sensible en carpetas, particiones o discos cifrados es indispensable para salvaguardar de ojos ajenos e indiscretos esta información. Hoy proponemos una solución para los usuarios de GNU/Linux con la que se podrá disponer, en este ejemplo, de una partición o de un disco completamente cifrado. Esta idea se puede extrapolar a una partición de un dispositivo USB, el cual utilicemos en el día a día en sistemas Linux. El primer paso es instalar cryptsetup, el cual está disponible en los repositorios, o incluso por defecto con el sistema. En este ejemplo se utiliza Red Hat, en el cual viene por defecto. Para instalarlo en sistemas con apt, ejecutar la instrucción apt-get install cryptsetup.

En primer lugar debemos disponer de un disco o partición. Se puede utilizar el comando fdisk para generar la partición, la cual queremos cifrar. El uso de fdisk es realmente sencillo se debe ejecutar fdisk /dev/<disco> y con la ayuda que es la tecla m, ir seleccionando las opciones que se quieren realizar, generalmente, n para crear una nueva partición, elección del tamaño de ésta, y la letra w para escribir los cambios en el disco.

Ahora estamos en condiciones de generar el contenedor cifrado de cryptsetup. Para ello, ejecutaremos la orden cryptsetup luksFormat /dev/<particion>, de esta manera se generará un contenedor de cifrado el cual destruirá los datos de dicha partición, pero a priori no hay problema ya que es una partición que acabamos de crear con fdisk. NOTA: las ejecuciones de cryptsetup deben realizar como root.

En la creación del contenedor nos piden una clave de cifrado con la que se protegerá la información sensible. Este contenedor dispone de un array de claves, comenzando por la posición 0, que es la clave que generamos al crear el contenedor, pero después se podrán ir añadiendo distintas claves en posiciones posteriores del array.

Ahora disponemos de un disco con la partición sdb1 cifrada. Si intentamos montarlo mediante mount /dev/sdb1 <ruta montaje> no podremos visualizar ningún dato, debido a que el contenedor se encuentra cifrado. Para descifrar el contenedor se utilizará la instrucción cryptsetup luksOpen /dev/<partición> <nombre lógico>. Tras la ejecución de esta instrucción dispondremos del contenedor descifrado en la ruta /dev/mapper.

Ahora solo queda montarlo como una unidad normal, ahora sí mediante la instrucción mount /dev/mapper/<nombre lógico> <ruta montaje>. Pero... hay que tener en cuenta que si es la primera vez que lo montamos, esta partición no dispondrá de un sistema de archivos, por lo que se deberá primero formatear la partición, por ejemplo con EXT3. Para ello se ejecuta la instrucción mkfs.ext3 /dev/mapper/<nombre lógico>.

Ahora sí... podemos montarlo :D Vale y ahora si tenemos que irnos y dejar el sistema encendido, ¿Podemos cerrar el contenedor y volver a cifrarlo? Por supuesto. Debemos ejecutar la siguiente instrucción cryptsetup luksClose /dev/mapper/<nombre logico>, previo desmontaje de la partición lógica.

Sencillo, ¿Verdad? Bien, si queremos añadir claves a los slots del contenedor, para que otros usuarios puedan acceder a dicho contenedor se puede ejecutar la siguiente instrucción crypsetup luksAddKey /dev/sdb1. De este modo se pedirá en primer lugar la clave del contenedor, una vez verificado que tenemos acceso al contenedor nos preguntarán por la nueva clave a añadir.

Si queremos eliminar una clave ejecutaremos la instrucción cryptsetup luksDelKey <número de slot>. Vale, ahora queremos que al arrancar el sistema, automáticamente pida la clave de descifrado de una unidad o que automáticamente la cargue de algún archivo, hecho no recomendable. Para ello utilizaremos los ficheros crypttab y fstab. En primer lugar, debemos configurar crypttab de la siguiente manera:

#Fichero crypttab

<nombre lógico> /dev/<partición> none

NOTA: none significa que la contraseña será pedida al arrancar el sistema, se puede indicar en texto plano la contraseña a introducir o el fichero donde se almacena dicha contraseña.

Ahora debemos configurar el fichero fstab para que automáticamente intente montar la partición ya descifrada. Tendrá el siguiente esquema:

#Fichero fstab

/dev/mapper/<nombre lógico> <ruta montaje> <fs> <opciones> 0 0

El resultado de todo esto es el siguiente:

Ahora no hay excusas para proteger nuestra información sensible mediante el uso de cifrados en Linux.

1 comentario:

  1. Gracias por este tutorial, sensacional, andaba detras de algo parecido, genial, saludos

    ResponderEliminar