Protección de datos almacenados en GNU/Linux

harddriveLos permisos estándar del sistema de ficheros de Linux  permiten protegerse de accesos no deseados. Sin embargo, en ocasiones, esta protección no es suficiente, dado que pueden existir ciertas situaciones que permitan a otros usuarios acceder a nuestros datos. Algunas de estas situaciones pueden ser:

  • En la utilización de un sistema de almacenamiento en una infraestructura externa, cualquier usuario con privilegios de superusuario puede acceder sin restricciones a cualquier información.
  • Cualquier tipo de acceso directo al disco duro desde un sistema operativo externo, montando el disco duro en otro ordenador.
  • La utilización de un live-cd en el arranque de un equipo, nos permite acceder a los datos cortocirtuitando todos los permisos de los ficheros.

La solución que proponemos en este articulo, es la encriptación de los datos como medida protección.

A continuación, detallamos como utilizar esta técnica en los diferentes niveles del sistema de ficheros:

1. Protección a nivel de fichero

La solución más simple y flexible para proteger un fichero sensible, es encriptarlo directamente, utilizando el comando bcrypt. Para realizar el encriptado realizamos los siguiente pasos:

Disponemos de un fichero no encriptado (public):

Se encripta el contenido del fichero public enviando el resultado a un nuevo fichero public.bfe, eliminando el fichero original public:

Verificamos el contenido del nuevo fichero encriptado:

Para visualizar el contenido de public.bfe sin desencriptarlo:

Para desencriptar el contenido del fichero public.bfe:

El inconveniente de este método, es que el usuario está obligado desencriptar manualmente cada fichero que desee consultar, además de tener que volver a encriptar el fichero si realiza alguna modificación.

NOTA: La utilidad bcrypt se encuentra en el paquete bcrypt de los repositorios EPEL o RepoForge (antiguo RPMForge).

2.Protección a nivel de disco o partición

Otra solución es gestionar el encriptado directamente a nivel de bloques o de discos. En este sistema el acceso es transparente por parte del usuario, ya que es el sistema el que se encarga de encriptar los bloques en el momento de su escritura y desencriptarlos cuando se realiza la lectura.

Utilizaremos la utilidad cryptsetup para realizar la encriptación a nivel de disco.

Inicializamos la partición /dev/sdb1  y establecemos la passphrase (a modo de contraseña):

La partición /dev/sdb1 no puede ser montada por los medios convencionales:

Creamos un fichero especial de tipo bloque a partir de una partición encriptada. Para ello, es importante introducir la clave de encriptación:

Damos formato ext4 al fichero de bloques:

El fichero de bloques creado nos permite acceder a los datos desencriptados:

El sistema de ficheros montado no permite saber que se trata de un soporte físico encriptado:

Por último, podemos conocer el estado con el siguiente comando:

3. Protección a nivel de sistema de ficheros

El mejor compromiso entre la flexibilidad y la eficiencia lo aporta la encriptación a nivel del sistema de ficheros.  La solución mas extendida para realizar este tipo de encriptación es ecryptfs.

La idea es utilizar un directorio, generalmente oculto, para almacenar en él los datos encriptados. Este directorio podrá montarse como un sistema de ficheros ecryptfs. Cualquier operación de montaje debe validarse mediante una contraseña (passphrase).

La utilidad ecrytfs podemos encontrarla en el paquete ecryptfs-utils:

Creamos el directorio .data:

Realizamos el encriptado del directorio .data utilizando el punto de montaje /data:

Comprobamos que el montaje se ha realizado correctamente:

Creamos un fichero en el sistema de ficheros montado:

Si desmontamos e intentamos visualizar el fichero creado: