Según Wikipedia, la configuración de clave unificada de Linux (LUKS) es una especificación de cifrado de disco creada por Clemens Fruhwirth en 2004 y originalmente estaba destinada a Linux. LUKS utiliza la cripta del mapeador de dispositivos (dm-crypt
) como un módulo del kernel para manejar el cifrado en el nivel del dispositivo de bloque.
Existen diferentes herramientas de front-end desarrolladas para cifrar particiones de Linux, ya sean particiones simples o volúmenes lógicos (LV). En este tutorial, exploraremos estas herramientas y demostraremos cómo configurar el cifrado de disco. Creé un disco de 10 GB (/dev/vdb
) para usar durante este tutorial.
Instalando las herramientas
Comencemos instalando las herramientas apropiadas para configurar el cifrado:
dnf install -y cryptsetup parted
La cryptsetup
el paquete proporciona el cryptsetup
comando, que usaremos para configurar el cifrado, mientras que el parted
el paquete proporciona el parted
comando para configurar la partición.
Creando la partición
Ejecutando lsblk
El comando muestra su configuración actual:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
Podemos encriptar un dispositivo de bloque completo como /dev/vdb
, pero crear una partición ofrece más flexibilidad ya que podemos agregar otras particiones más adelante.
Ahora ejecutamos los siguientes comandos para crear una partición para cifrar:
[root@rhel8 ~]# parted /dev/vdb mklabel msdos
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb -s "mkpart primary 2048s -1"
[root@rhel8 ~]# parted /dev/vdb align-check optimal 1
1 aligned
Al ejecutar lsblk
nuevamente, vemos que el dev/vdb1
se agregó la partición:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
Formateando el volumen con LUKS
El siguiente proceso cifra dev/vdb1
. Para continuar, debe ingresar YES
en mayúsculas y proporcione la contraseña dos veces:
[root@rhel8 ~]# cryptsetup -y -v luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/vdb1:
Verify passphrase:
Key slot 0 created.
Command successful.
Luego, necesitamos un objetivo para abrir el volumen cifrado. Usé mybackup
como mi objetivo, pero este objetivo puede tener cualquier nombre:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
Ejecutando lsblk
una vez más, vemos:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt
También podemos ver el mybackup
mapeo del volumen encriptado:
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
Creando un sistema de archivos
Como ahora podemos acceder al volumen cifrado, debemos formatearlo antes de poder almacenar datos en él. Puede elegir entre diferentes tipos de sistemas de archivos, como xfs (el predeterminado en Red Hat Enterprise Linux 8), ext3, ext4, etc. En aras de la simplicidad, usaremos xfs como tipo de sistema de archivos:
[root@rhel8 ~]# mkfs.xfs /dev/mapper/mybackup
meta-data=/dev/mapper/mybackup isize=512 agcount=4, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2618880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Creando el punto de montaje y el directorio
Para escribir datos en el sistema de archivos cifrado, primero debemos montarlo. Elegí /mnt/my_encrypted_backup
para ser el punto de montaje de mis datos:
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
Luego ejecutamos el mount
comando:
[root@rhel8 ~]# mount -v /dev/mapper/mybackup /mnt/my_encrypted_backup/
mount: /mnt/my_encrypted_backup does not contain SELinux labels.
You just mounted an file system that supports labels which does not
contain labels, onto an SELinux box. It is likely that confined
applications will generate AVC messages and not be allowed access to
this file system. For more details see restorecon(8) and mount(8).
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Aquí recibimos una advertencia de Linux con seguridad mejorada (SELinux). Necesitamos volver a etiquetar el contexto de seguridad de SELinux del punto de montaje:
[root@rhel8 ~]# restorecon -vvRF /mnt/my_encrypted_backup/
Relabeled /mnt/my_encrypted_backup from system_u:object_r:unlabeled_t:s0 to system_u:object_r:mnt_t:s0
Ejecutando el mount
comando una vez más muestra que la advertencia se ha ido:
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Ejecutando lsblk
de nuevo produce el siguiente resultado:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt /mnt/my_encrypted_backup
Recuperando detalles de LUKS
Ahora podemos volcar la información del encabezado de LUKS, la sección del segmento de datos, las ranuras clave utilizadas, etc.:
[root@rhel8 ~]# cryptsetup luksDump /dev/vdb1
LUKS header information
Version: 2
Epoch: 3
Metadata area: 12288 bytes
[……]
Digest: 49 5a 68 e9 b6 66 50 2d c8 22 8e b9 d5 fd 2c af
23 b7 47 f3 2f 62 ee 6a b8 7c 93 8f 19 fe d8 3c
Adición de un archivo de clave y montaje automático
Montar el sistema de archivos encriptado LUKS automáticamente tiene implicaciones de seguridad. Para los usuarios de portátiles, hacer esto no es una buena elección. Si le roban su dispositivo, también lo harán sus datos almacenados en la partición cifrada.
Independientemente de las implicaciones de seguridad mencionadas anteriormente, aquí se explica cómo configurar el montaje automático. Primero, cree el directorio apropiado para almacenar el archivo clave:
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
Luego, agregue la clave usando cryptsetup
utilidad:
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
A continuación, necesitamos restaurar el contexto de SELinux:
[root@rhel8 ~]# restorecon -vvRF /etc/luks-keys
Relabeled /etc/luks-keys from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Relabeled /etc/luks-keys/mybackup_key from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Anteriormente, abrimos el sistema de archivos cifrados y lo montamos manualmente. Ahora tenemos que ver si podemos hacer lo mismo con la automatización. Dado que nuestro sistema de archivos ya está montado, primero debemos umount
(desmontarlo):
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
Intentemos abrir la partición cifrada a través de la línea de comandos usando el archivo como clave:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
A continuación, debemos configurar /etc/crypttab
y /etc/fstab
para montar el disco en el arranque. Primero necesitamos el UUID para /dev/vdb1
(no /dev/mapper/mybackup
), que se puede recuperar de la siguiente manera:
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
Ahora ingrese la siguiente línea en /etc/crypttab
para que podamos abrir automáticamente nuestro sistema de archivos encriptado:
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
Con todo esto hecho, ahora podemos configurar /etc/fstab
. Agregue la siguiente línea (en negrita) a este archivo:
[root@rhel8 ~]# vi /_etc_/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 8 06:21:57 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
[...]
**/dev/mapper/mybackup /mnt/my_encrypted_backup xfs defaults 0 0**
Y, finalmente, podemos probar para ver si el montaje automático funciona sin reiniciar la máquina, usando mount -a
:
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
En este caso, /mnt/my_encrypted_backup
se montó con éxito. Ahora, reinicie el sistema y asegúrese de que el montaje automático también funcione al reiniciar.
Pensamientos finales
Hay otras opciones que se pueden proporcionar a cryptsetup
, y cada uno tiene ventajas y desventajas cuando se trata de velocidad y un sistema de archivos más seguro. Explore las opciones y elija la que mejor se adapte a su situación.