GNU/Linux >> Tutoriales Linux >  >> Linux

Configuración de LUKS:configuración de clave unificada de Linux

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.


Linux
  1. Cree una bóveda de archivos cifrados en Linux

  2. Monitoreo de seguridad en Linux con Tripwire

  3. Configuración de almacenamiento en bloque en servidores Linux

  4. Cómo configurar SSH sin contraseña en Linux

  5. Cómo configurar las claves SSH para el inicio de sesión ssh "sin contraseña" en Linux

Cómo configurar el último OpenJDK de Oracle en Linux

Configurar el entorno de desarrollo local de WordPress en Linux

Cómo configurar SFTP chroot en Linux

Instalación y configuración de Jenkins en Linux

Cómo crear una frase de contraseña de clave SSH en Linux

Cómo configurar WireGuard VPN en Linux