Thursday Feb 03, 2022

Cómo cifrar el sistema de archivos raíz en Linux

Como administrador del sistema, probablemente ya sabes lo importante que es cifrar tus discos.

Si te robasen el portátil, incluso un hacker novato sería capaz de extraer la información contenida en los discos.

Todo lo que se necesita es una simple memoria USB con un LiveCD en ella y todo sería robado.

Por suerte para usted, hay formas de evitar que esto suceda: cifrando los datos almacenados en sus discos.

En este tutorial, vamos a ver los pasos necesarios para realizar un cifrado completo del sistema. Es posible que encuentres otros tutoriales en Internet centrados en cifrar sólo un archivo o las particiones de inicio, por ejemplo.

En este caso, vamos a cifrar todo el sistema, es decir, toda la partición raíz y la carpeta de arranque. Vamos a cifrar una parte del gestor de arranque.

¿Listo?

Tabla de contenidos

Requisitos previos

Para poder realizar todas las operaciones que se detallan en esta guía, evidentemente es necesario tener derechos de administrador del sistema.

Para comprobar que es así, asegúrate de que perteneces al grupo «sudo» (para las distribuciones basadas en Debian) o «wheel» (en las basadas en RedHat).

Si ves la siguiente salida, deberías estar listo.

Antes de continuar, es importante que sepas que la encriptación de discos no está exenta de riesgos.

El proceso implica el formateo de todo el disco, lo que significa que perderás datos si no haces una copia de seguridad. Como consecuencia, puede ser una buena idea que hagas una copia de seguridad de tus archivos, ya sea que elijas hacerlo en una unidad externa o en una nube online.

Si no estás seguro de los pasos necesarios para hacer una copia de seguridad de todo tu sistema, te recomiendo que leas el siguiente tutorial que lo explica en términos claros.

Ahora que todo está configurado, podemos empezar a cifrar todo nuestro sistema.

Identifica tu situación actual

Este tutorial está dividido en tres partes : una para cada escenario al que te puedes enfrentar.

Después de identificar tu situación actual, puedes navegar directamente al capítulo que te interesa.

Si quiere cifrar un sistema que ya contiene datos sin cifrar, tiene dos opciones :

  • Puede añadir un disco adicional a su ordenador o servidor y configurarlo para que se convierta en el disco de arranque : puede ir a la parte uno.
  • No puede añadir un disco adicional a su ordenador (un portátil en garantía por ejemplo) : encontrará la información necesaria en la parte dos.

Si está instalando un sistema nuevo, es decir, si instala la distribución desde cero, puede cifrar todo el disco directamente desde el instalador gráfico. En consecuencia, puede pasar a la tercera parte.

Diseñar el diseño del disco duro

Siempre que vaya a crear nuevas particiones, cifradas o no, es muy importante elegir el diseño del disco duro con antelación.

En este caso, vamos a diseñar nuestro disco utilizando una disposición MBR : los primeros 512 bytes del disco de arranque se reservarán para la primera etapa del GRUB (así como los metadatos para nuestras particiones).

La primera partición será una partición vacía reservada para los sistemas que utilizan EFI (o UEFI) como firmware de arranque. Si en el futuro se opta por instalar Windows 10, ya se dispondrá de una partición para ello.

La segunda partición de nuestro disco se formateará como una partición LUKS-LVM que contiene un volumen físico (la propia partición del disco) así como un grupo de volúmenes que contiene dos volúmenes lógicos : uno para el sistema de archivos raíz y otro para una pequeña partición de intercambio.

Como puedes ver, la segunda etapa del GRUB también estará encriptada : esto es porque elegimos tener la carpeta de arranque almacenada en la misma partición.

Por supuesto, no estás limitado al diseño proporcionado aquí, puedes añadir volúmenes lógicos adicionales para tus registros, por ejemplo.

Este diseño será nuestra hoja de ruta para este tutorial : vamos a empezar desde un disco completamente nuevo e implementar todas las partes juntas.

Encriptación de datos en reposo

Este tutorial se centra en la encriptación de datos en reposo. Como su nombre indica, el cifrado de datos en reposo significa que su sistema está cifrado, es decir, nadie puede leer de él, cuando está en reposo o apagado.

Esta encriptación es bastante útil si te roban el ordenador, los hackers no podrán leer los datos del disco a menos que conozcan la frase de contraseña que vas a elegir en las siguientes secciones.

Sin embargo, seguiría existiendo el riesgo de que sus datos sean borrados para siempre: no tener acceso de lectura a un disco no significa que no puedan simplemente eliminar las particiones del mismo.

Como consecuencia, asegúrese de guardar una copia de seguridad de sus archivos importantes en algún lugar seguro.

Encriptar el sistema de archivos raíz en un disco nuevo

Como se detalló durante la introducción, vamos a encriptar el sistema de archivos raíz de un disco nuevo que no contiene ningún dato. Esto es bastante importante porque el disco cifrado será formateado en el proceso.

Dirígete al sistema que quieres cifrar y conecta el nuevo disco. Antes de nada, identifica tu disco actual, que probablemente se llame «/dev/sda» y el disco que acabas de enchufar (probablemente se llame «/dev/sdb»).

Si tienes dudas sobre la correspondencia entre los nombres y los seriales de los discos, puedes anexar los vendedores y los seriales con la opción «-o» de lsblk.

$ lsblk -do +VENDOR,SERIAL

En este caso, el disco con datos se llama «/dev/sda» y el nuevo se llama «/dev/sdb».

En primer lugar, tenemos que crear la distribución que especificamos en la introducción, es decir, una partición que va a ser EFI y otra LUKS-LVM.

Creación de la disposición básica del disco

El primer paso en nuestro viaje hacia el cifrado completo del disco comienza con dos particiones sencillas : una EFI (aunque usemos MBR, por si quieres cambiar en el futuro) y otra para nuestro LVM.

Para crear nuevas particiones en tu disco, utiliza el comando «fdisk» y especifica el disco a formatear.

$ sudo fdisk /dev/sdb

Como hemos explicado en la introducción, la primera partición será de 512 Mb y la otra ocupará el espacio restante del disco.

En la utilidad «fdisk» se puede crear una nueva partición con la opción «n» y especificar un tamaño de 512 megabytes con «+512M».

Asegúrate de cambiar el tipo de partición a W95 FAT32 utilizando la opción «t» y especificando «b» como tipo.

Impresionante, ahora que tienes tu primera partición, vamos a crear la que nos interesa.

Crear la segunda partición es aún más sencillo.

En la utilidad fdisk, utilice «n» para crear una nueva partición y siga los valores predeterminados, lo que significa que puede pulsar «Enter» en cada paso.

Cuando haya terminado, puede simplemente pulsar «w» para escribir los cambios en el disco.

Ahora, ejecutar de nuevo el comando «fdisk» te dará una buena idea de los cambios que has realizado en el disco.

$ sudo fdisk -l /dev/sdb

¡Genial!

Tu segunda partición está lista para ser formateada, así que vamos a dirigirnos a ella.

Creando particiones LUKS & LVM en el disco

Para cifrar los discos, vamos a utilizar LUKS, abreviatura del proyecto Linux Unified Key Setup.

LUKS es una especificación para varios backends implementados en algunas versiones del kernel de Linux.

En este caso, vamos a utilizar el submódulo «dm-crypt» de la pila de almacenamiento de Linux.

Como su nombre indica, «dm-crypt» forma parte del módulo device mapper que tiene como objetivo crear una capa de abstracción entre tus discos físicos y la forma que elijas para diseñar tu pila de almacenamiento.

Diagrama de thomas-krenn.com

Esta información es bastante importante porque significa que puedes encriptar prácticamente todos los dispositivos usando el backend «dm-crypt».

En este caso, vamos a cifrar un disco, que contiene un conjunto de particiones LVM, pero puedes optar por cifrar una memoria USB o un disquete.

Para interactuar con el módulo «dm-crypt», vamos a utilizar el comando «cryptsetup».

Obviamente, puede que necesites instalarlo en tu servidor si no lo tienes ya.

$ sudo apt-get instal cryptsetup$ which cryptsetup

Ahora que el cryptsetup está disponible en tu ordenador, crearás tu primera partición con formato LUKS.

Para crear una partición LUKS, vas a utilizar el comando «cryptsetup» seguido del comando «luksFormat» que formatea la partición (o disco) especificada.

 $ sudo cryptsetup luksFormat --type luks1 /dev/sdb2

Nota : entonces, ¿por qué estamos especificando el tipo de formateo LUKS1? A partir de enero de 2021, GRUB (nuestro gestor de arranque) no soporta el cifrado LUKS2. Asegúrese de dejar un comentario si se da cuenta de que LUKS2 está ahora liberado para el bootlader GRUB.

Como puede ver, se le notifica que esta operación borrará todos los datos almacenados en el disco. Compruebe el disco que va a formatear una última vez y escriba «YES» cuando esté listo.

Inmediatamente después, se le pedirá una frase de acceso. LUKS utiliza dos métodos de autenticación: uno basado en la frase de paso que es esencialmente una contraseña que se introduce en el descifrado.

LUKS también puede utilizar claves. Usando claves, puede, por ejemplo, almacenarla en una parte de su disco y su sistema podrá cuidarla automáticamente.

Elija una frase de contraseña fuerte, introdúzcala de nuevo y espere a que el cifrado del disco se complete.

Cuando haya terminado, puede comprobar con el comando «lsblk» que su partición está ahora cifrada como una LUKS.

¡Impresionante! Ahora tienes una partición cifrada.

$ lsblk -f

Para comprobar que tu partición está correctamente formateada, puedes utilizar el comando «cryptsetup» seguido de la opción «luksDump» y especificar el nombre del dispositivo cifrado.

$ sudo cryptsetup luksDump /dev/sdb2

Tu versión debería estar configurada como «1» para el formato «LUKS1» y deberías ver debajo la frase de contraseña encriptada en uno de los keyslots.

Creando LVM encriptado en el disco

Ahora que tu partición encriptada LUKS está lista, puedes «abrirla». «Abrir» una partición encriptada significa simplemente que vas a acceder a los datos del disco.

Para abrir tu dispositivo encriptado, utiliza el comando «cryptsetup» seguido de «luksOpen», el nombre del dispositivo encriptado y un nombre.

$ sudo cryptsetup luksOpen <encrypted_device> <name>

En este caso, elegimos llamar al dispositivo «cryptlvm».

Como consecuencia, utilizando de nuevo el comando «lsblk», se puede ver que se ha añadido un nuevo dispositivo a la lista de dispositivos existente. La segunda partición contiene ahora un dispositivo llamado «cryptlvm» que es su partición descifrada.

Ahora que todo está listo, podemos empezar a crear nuestros dos LVM : uno para nuestra partición raíz y otro para la swap.

En primer lugar, vamos a crear un volumen físico para nuestro nuevo disco utilizando el comando «pvcreate».

# Optional, if you don't have LVM commands : sudo apt-get install lvm2$ sudo pvcreate /dev/mapper/cryptlvm

Ahora que tu volumen físico está listo, puedes usarlo para crear un grupo de volúmenes llamado «cryptvg».

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

Ahora que su grupo de volúmenes está listo, puede crear sus dos volúmenes lógicos.

En este caso, la primera partición es de 13Gb y la partición de intercambio ocupará el espacio restante. Asegúrese de modificar esos números para su caso específico.

Para alojar nuestro sistema de archivos raíz, vamos a crear un sistema de archivos EXT4 en el volumen lógico.

$ sudo lvcreate -n lvroot -L 13G cryptvg$ sudo mkfs.ext4 /dev/mapper/cryptvg-lvroot

La creación de la partición de intercambio se puede conseguir siguiendo los mismos pasos, utilizando el «lvcreate» y el «mkswap».

$ sudo lvcreate -n lvswap -l 100%FREE cryptvg$ sudo mkswap /dev/mapper/cryptvg-lvswap

¡Asombroso! Ahora que tus particiones están creadas, es el momento de transferir tu sistema de archivos raíz existente en el recién creado.

Transfiere todo el sistema de archivos al disco encriptado

Antes de transferir todo tu sistema de archivos, podría ser una buena idea comprobar que tienes suficiente espacio en la unidad de destino.

$ df -h 

Para transferir todo su sistema de archivos a su partición recién creada, va a utilizar el comando «rsync».

Monte su volumen lógico recién creado y comience a copiar sus archivos y carpetas recursivamente a la unidad de destino.

$ sudo mount /dev/mapper/cryptvg-lvroot /mnt$ sudo rsync -aAXv / --exclude="mnt" /mnt --progress

Este proceso puede tardar bastante tiempo dependiendo de la cantidad de datos que tenga que transferir.

Después de un rato, todo tu sistema de archivos debería estar copiado en tu unidad encriptada. Ahora que el «/boot» está encriptado, necesitará reinstalar la etapa 1 del GRUB en consecuencia.

Instalar y configurar el gestor de arranque GRUB

Entonces, ¿por qué necesitaría reinstalar y reconfigurar su GRUB en consecuencia?

Para responder a esta pregunta, necesita tener una idea básica de la forma en que su sistema arranca cuando utiliza un proceso de arranque convencional BIOS/MBR.

Como se explica en la introducción, GRUB se divide en dos (a veces tres) partes : La etapa 1 de GRUB y la etapa 2 de GRUB. La etapa 1 sólo buscará la ubicación de la etapa 2, a menudo ubicada en la carpeta «/boot» de su sistema de archivos.

La etapa 2 es responsable de muchas tareas : cargar los módulos necesarios, cargar el kernel en la memoria e iniciar el proceso initramfs.

Como ha entendido, la etapa 2 está encriptada aquí, por lo que necesitamos decirle a la etapa 1 (ubicada en los primeros 512 bytes de su disco) que necesita ser desencriptada primero.

Reinstalar la etapa 1 de GRUB & 2

Para reinstalar la primera etapa de GRUB, primero hay que habilitar el «cryptomount» que permite acceder a los dispositivos encriptados en el entorno de GRUB.

Para conseguirlo, necesita editar el archivo «/etc/default/grub» y añadir la opción «GRUB_ENABLE_CRYPTODISK=y». Como consecuencia, necesitarás hacer chroot en tu nueva unidad para poder ejecutar los comandos correctamente.

Chroot en la unidad encriptada

Para hacer chroot en tu unidad encriptada, tendrás que ejecutar los siguientes comandos.

Ahora que has ejecutado esos comandos, deberías estar en el contexto de tu unidad encriptada.

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

Como se indica en la documentación de GRUB, esta opción configurará el GRUB para buscar dispositivos encriptados y añadir comandos adicionales para desencriptarlos.

Ahora que la etapa 1 está configurada, puede instalarla en su MBR usando el comando grub-install.

$ grub-install --boot-directory=/boot /dev/sdb

Nota : tenga cuidado, necesita especificar «/dev/sdb» y no «/dev/sdb1».

Como probablemente haya notado, al no proporcionar opciones para la instalación de GRUB, tiene por defecto una instalación «i386-pc» (que está diseñada para un firmware basado en BIOS).

Reinstalar la etapa 2 de GRUB

Usando los pasos detallados anteriormente, la etapa 1 ha sido actualizada pero también necesitamos decirle a la etapa 2 que está tratando con un disco encriptado.

Para conseguirlo, dirígete al «/etc/default/grub» y añade otra línea para tu etapa 2 de GRUB.

GRUB_CMDLINE_LINUX="cryptdevice=UUID=<encrypted_device_uuid> root=UUID=<root_fs_uuid>"

Esta es una línea importante porque le dice a la segunda etapa del GRUB dónde está la unidad encriptada y dónde se encuentra la partición raíz.

Para identificar los UUIDs necesarios, puede utilizar el comando «lsblk» con la opción «-f».

$ lsblk -f 

Usando esos UUIDs, añadiríamos la siguiente línea al fichero de configuración de GRUB.

Para actualizar tu actual instalación de GRUB, puedes usar el comando «update-grub2» en tu entorno chroot.

$ sudo update-grub2

Ahora que ha actualizado su instalación de GRUB, su menú de GRUB (es decir, la etapa 2) debería modificarse y debería ver el siguiente contenido al inspeccionar el archivo «/boot/grub/grub.cfg».

Como puede ver, el archivo de configuración de GRUB fue modificado y su sistema ahora está usando «cryptomount» para localizar la unidad encriptada.

Para que su sistema arranque correctamente, necesita comprobar que :

  • Está cargando los módulos correctos como cryptodisk, luks, lvm y otros;
  • La instrucción «cryptomount» está correctamente configurada;
  • El kernel se carga usando la instrucción «cryptdevice» que acabamos de configurar en la sección anterior.
  • Los UUID especificados son correctos : el de «cryptdevice» apunta a la partición encriptada LUKS2 y el de «root» al sistema de ficheros raíz ext4.

Modificar los ficheros crypttab y fstab

Uno de los primeros pasos de initramfs será montar sus volúmenes utilizando los ficheros «/etc/crypttab» y «/etc/fstab» del sistema de ficheros.

Como consecuencia, y debido a que estás creando nuevos volúmenes, puede que tengas que modificar esos archivos para poner el UUID correcto en ellos.

En primer lugar, dirígete al fichero «/etc/crypttab» (puedes crearlo si no existe ya) y añade el siguiente contenido

$ nano /etc/crypttab# <target name> <source device> <key file> <options> cryptlvm UUID=<luks_uuid> none luks

Si no estás seguro del UUID de tu dispositivo encriptado, puedes utilizar el «blkid» para obtener la información.

$ blkid | grep -i LUKS 

Ahora que el archivo crypttab está modificado, sólo tienes que modificar el fstab en consecuencia.

$ nano /etc/fstab# <file system> <mount point> <type> <options> <dump> <pass>UUID=<ext4 uuid> / ext4 errors=remount-ro 0 1

De nuevo, si no estás seguro del UUID de tu sistema de archivos ext4, puedes usar el comando «blkid» de nuevo.

$ blkid | grep -i ext4

¡Casi listo!

Ahora que su GRUB y los archivos de configuración están correctamente configurados, sólo necesitamos configurar la imagen initramfs.

Reconfigurar la imagen initramfs

Entre todos los scripts de arranque, initramfs buscará el sistema de archivos raíz que especificó en el capítulo anterior.

Sin embargo, para descifrar el sistema de archivos raíz, necesitará invocar los módulos correctos de initramfs, concretamente el «cryptsetup-initramfs». En su entorno chroot, puede ejecutar el siguiente comando :

$ apt-get install cryptsetup-initramfs 

Para incluir los módulos cryptsetup en su imagen initramfs, asegúrese de ejecutar el comando «update-initramfs».

$ update-initramfs -u -k all

¡Eso es todo!

Has ensamblado con éxito todas las piezas necesarias para crear un disco totalmente encriptado en tu sistema. Ahora puede reiniciar su ordenador y echar un vistazo a su nuevo proceso de arranque.

Boot on Encrypted Device

Al arrancar, la primera pantalla que verá es la primera etapa del GRUB intentando desencriptar la segunda etapa del GRUB.

Si ve este aviso de contraseña, significa que no tiene ningún error en su configuración de la etapa 1.

Nota: tenga en cuenta que esta pantalla puede no seguir la disposición habitual de su teclado. Como consecuencia, si tiene un aviso de contraseña incorrecta, debería intentar fingir que tiene un teclado US o uno AZERTY por ejemplo.

Cuando proporcione la contraseña correcta, se le presentará el menú GRUB.

Si ve esta pantalla, significa que su etapa 1 fue capaz de abrir la etapa 2. Puede seleccionar la opción «Ubuntu» y arrancar en su sistema.

En la siguiente pantalla, se le pide que proporcione la frase de contraseña de nuevo.

Esto es bastante normal porque su partición de arranque está cifrada. Como consecuencia, se necesita una frase de contraseña para desbloquear la etapa 2 y otra para desbloquear todo el sistema de archivos raíz.

Por suerte, hay una manera de evitar eso: teniendo un archivo de claves incrustado en la imagen initramfs. Para ello, los colaboradores de ArchLinux escribieron un excelente tutorial sobre el tema. ¡

En este caso, sólo vamos a proporcionar la frase de contraseña y pulsar Enter.

Después de un tiempo, cuando el proceso de init se hace, usted debe ser presentado con la pantalla de bloqueo de su interfaz de usuario!

¡Felicidades, ha encriptado con éxito un sistema completo en Linux!

Encriptación del sistema de archivos raíz en un disco existente

En algunos casos, puede que tenga que encriptar un disco existente sin la posibilidad de eliminar uno de los discos de su ordenador. Este caso puede ocurrir si tiene un disco en garantía, por ejemplo.

En este caso, el proceso es bastante sencillo :

  • Haga un USB de arranque (o dispositivo extraíble) que contenga una ISO de la distribución de su elección;
  • Utilice el dispositivo para arrancar e iniciar sesión en un LiveCD de su distribución;
  • Desde el LiveCD, identifique el disco duro que contiene su distribución raíz y haga una copia de seguridad del mismo;
  • Monte la partición primaria en la carpeta de su elección y siga las instrucciones del capítulo anterior;

¿Por qué necesita utilizar un LiveCD si quiere cifrar un disco no extraíble?

Si quisieras encriptar tu disco primario principal, tendrías que desmontarlo. Sin embargo, al tratarse de la partición raíz de su sistema, no podría desmontarlo, por lo que tendría que utilizar un LiveCD.

Encriptación del sistema de archivos raíz desde el asistente de instalación

En algunos casos, algunos distribuidores incrustan el proceso de encriptación directamente en el asistente de instalación.

Si no busca transferir un sistema de archivos existente de un sistema a otro, puede verse tentado a utilizar esta opción.

Tomando Ubuntu 20.04 como ejemplo, el proceso de instalación sugiere el cifrado del disco en el asistente de configuración del disco.

Si selecciona esta opción, tendrá una configuración similar a la realizada en las secciones anteriores. Sin embargo, la mayoría de las distribuciones optan por no cifrar la carpeta «/boot».

Si desea cifrar la carpeta «/boot», le recomendamos que lea la primera sección de este tutorial.

Solución de problemas

Como el código abierto cambia constantemente, existe la posibilidad de que no sea capaz de arrancar su sistema, incluso si ha seguido los pasos de este tutorial cuidadosamente.

Sin embargo, como las fuentes de error son probablemente infinitas y específicas para cada usuario, no tendría sentido enumerar cada uno de los problemas que puede encontrar.

Sin embargo, la mayoría de las veces, es bastante importante saber en qué paso del proceso de arranque está fallando.

Si ve una pantalla con un aviso de «grub rescue», probablemente significa que está atascado en la etapa 1, por lo que el gestor de arranque no fue capaz de localizar el disco que contiene la segunda etapa.

Si está en un prompt de initramfs, probablemente significa que algo malo ocurrió durante el proceso de init :

  • ¿Está seguro de haber especificado los sistemas de ficheros a montar en los ficheros crypttab y fstab?
  • ¿Está seguro de que todos los módulos fueron cargados actualmente en su imagen initramfs? No te faltan los módulos cryptsetup o lvm por ejemplo?

Abajo hay algunos recursos que encontramos interesantes durante la escritura de este tutorial, pueden tener algunas respuestas a tus problemas :

  • Encriptar un sistema entero : un tutorial similar para ArchLinux;
  • Encriptación manual del sistema en Ubuntu : pasos utilizados para hacer chroot en un sistema de archivos raíz.

Conclusión

En este tutorial, aprendiste cómo puedes encriptar un sistema de archivos raíz completo, con la carpeta «/boot», usando la especificación LUKS.

También aprendiste sobre el proceso de arranque de Linux y los diferentes pasos por los que pasa tu sistema para lanzar tu sistema operativo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Back to Top