LUKS – Encriptar Discos en Linux RedHat

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

El cifrado de datos es cada vez más importante para la seguridad de cualquier entorno profesional que almacene datos críticos. En RedHat podemos encriptar un disco completo.

A este sistema de cifrado se le conoce como Linux Unified Key Setup-on-disk-format o LUKS, para abreviar.

A continuación, vamos a ver un ejemplo de cómo cifrar un disco en RedHat 8.

Formateando el disco que vamos a encriptar

El primer paso del procedimiento es dar formato al disco que vamos a encriptar. Lo haremos con el comando cryptsetup.

[[email protected] ~]# cryptsetup -y -v luksFormat /dev/nvme0n2

WARNING!
========
This will overwrite data on /dev/nvme0n2 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/nvme0n2: 
Verify passphrase: 

Key slot 0 created.
Command successful.
[[email protected] ~]# 

El cifrado puede tardar un ratito, dependiendo del tamaño del disco. También debemos tener en cuenta utilizar una contraseña complicada, de lo contrario, cryptsetup lo detectará y no dejará encriptar el disco.

IMPORTANTE: Guardar la contraseña en un lugar seguro para poder acceder a los datos del disco encriptado.

Mapeo de la LUK en el sistema

Ahora vamos a darle un nombre amigable o que se corresponda con el servicio que le vamos a dar a este disco. Para este ejemplo, la llamaremos «test».

[[email protected] ~]# cryptsetup luksOpen /dev/nvme0n2 test
Enter passphrase for /dev/nvme0n2: 
[[email protected] ~]#

Podemos comprobar que en el sistema se ha creado el dispositivo «test»:

[[email protected] ~]# ls -la /dev/mapper/test
lrwxrwxrwx. 1 root root 7 Nov 17 22:45 /dev/mapper/test -> ../dm-0
[[email protected] ~]# 

Si queremos conocer si el disco cifrado está en estado activo, lo averiguaremos con cryptsetup:

[[email protected] ~]# cryptsetup -v status test
/dev/mapper/test is active.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 512 bits
  key location: keyring
  device:  /dev/nvme0n2
  sector size:  512
  offset:  32768 sectors
  size:    4161536 sectors
  mode:    read/write
Command successful.
[[email protected] ~]#

Antes de utilizar el disco encriptado

Por motivos de seguridad, conviene eliminar cualquier dato que pudiese tener el disco. Podría ser algún disco reutilizado, por ejemplo.

[[email protected] ~]# dd if=/dev/zero of=/dev/mapper/test
dd: writing to '/dev/mapper/test': No space left on device
4161537+0 records in
4161536+0 records out
2130706432 bytes (2.1 GB, 2.0 GiB) copied, 43.8529 s, 48.6 MB/s
[[email protected] ~]# 

Creación de un filesystem en el disco encriptado

Este punto no tiene ningún misterio. Se sigue el mismo procedimiento que utilizamos habitualmente para crear cualquier filesystem en Linux.

[[email protected] ~]# mkfs.xfs /dev/mapper/test 
meta-data=/dev/mapper/test       isize=512    agcount=4, agsize=130048 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=520192, 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
[[email protected] ~]#

Montaje del filesystem

Para utilizar el disco inmediatamente, siempre podremos montar el filesystem a través de la línea de comandos:

[[email protected] ~]# mkdir /test
[[email protected] ~]# mount /dev/mapper/test /test
[[email protected] ~]# df -hP /test
Filesystem        Size  Used Avail Use% Mounted on
/dev/mapper/test  2.0G   47M  2.0G   3% /test
[[email protected] ~]# 

Pero, lo lógico, es que queramos montar los filesystems encriptados con el arranque del sistema. Para ello, tendremos que configurar los ficheros /etc/crypttab y /etc/fstab y crear un fichero de encriptación con las credenciales de acceso que, en este caso, lo llamaremos /root/keytest:

  • Creación del fichero que almacenará la clave de encriptación:
[[email protected] ~]# dd if=/dev/urandom of=/root/keytest bs=1024 count=4
4+0 records in
4+0 records out
4096 bytes (4.1 kB, 4.0 KiB) copied, 0.00024515 s, 16.7 MB/s
[[email protected] ~]#

[[email protected] ~]# chmod 0400 /root/keytest  

  • Añadimos la clave de encriptación al fichero:
[[email protected] ~]# cryptsetup luksAddKey /dev/nvme0n2 /root/keytest
Enter any existing passphrase: 
[[email protected] ~]# 
  • Configuramos el fichero /etc/crypttab para el mapeo del disco encriptado durante el arranque del sistema, haciendo referencia al fichero que contiene la clave cifrada generado anteriormente:
[[email protected] ~]# cat /etc/crypttab 
test	/dev/nvme0n2	
/root/keytest
[[email protected] ~]#
  • Configuramos el fichero /etc/fstab para el montaje del filesystem durante el arranque del sistema:
[[email protected] ~]# tail -1 /etc/fstab
/dev/mapper/test	/test	xfs	defaults	0 0
[[email protected] ~]#

Uso de LUKs con LVM (Logical Volume Manager)

De la misma manera que hemos creado un filesystem, también podemos utilizar el disco encriptado para que forme parte de una estructura LVM.

[[email protected] ~]# vgcreate vgtest /dev/mapper/test
WARNING: xfs signature detected on /dev/mapper/test at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/mapper/test.
  Physical volume "/dev/mapper/test" successfully created.
  Volume group "vgtest" successfully created
[[email protected] ~]#

[[email protected] ~]# lvcreate -n lvtest -l+100%FREE vgtest

  Logical volume "lvtest" created.
[[email protected] ~]# 
[[email protected] ~]# mkfs.xfs /dev/vgtest/lvtest 
meta-data=/dev/vgtest/lvtest     isize=512    agcount=4, agsize=64256 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=257024, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1566, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[[email protected] ~]# 


[[email protected] ~]# tail -1 /etc/fstab 
/dev/vgtest/lvtest	/test	xfs	defaults	0 0
[[email protected] ~]# 

[[email protected] ~]# mount /test
[[email protected] ~]# df -hP /test
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vgtest-lvtest  998M   40M  959M   4% /test
[[email protected] ~]# 

Desmontaje de una LUK

Si tenemos la necesidad de desmontar un filesystem encriptado y el disco, lo podremos realizar fácilmente de la siguiente manera:

[[email protected] ~]# umount /test
[[email protected] ~]# cryptsetup luksClose test
[[email protected] ~]# 

Modificar la contraseña de encriptación de una LUK

Con el siguiente comando cambiaremos la contraseña de encriptación del disco.

[[email protected] ~]# cryptsetup luksChangeKey /dev/nvme0n2
Enter passphrase to be changed: 
No key available with this passphrase.
[[email protected] ~]# 

No tendremos que volver a generar el fichero /root/keytest, que habíamos generado anteriormente para el montaje automático del filesystem con el arranque del sistema.

Te puede interesar

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

SUSCRÍBETE A PUERTO53

Recibe un email periódico con los artículos más interesantes de Puerto53.com

Antes de suscribirte lee los términos y condiciones. Gracias.

Contenido Relacionado

Artículos Recientes

Deja un comentario

About Author