Selon Wikipedia, Linux Unified Key Setup (LUKS) est une spécification de chiffrement de disque créée par Clemens Fruhwirth en 2004 et était initialement destinée à Linux. LUKS utilise le chiffrement du mappeur de périphérique (dm-crypt
) en tant que module du noyau pour gérer le chiffrement au niveau du périphérique bloc.
Il existe différents outils frontaux développés pour chiffrer les partitions Linux, qu'il s'agisse de partitions simples ou de volumes logiques (LV). Dans ce didacticiel, nous allons explorer ces outils et montrer comment configurer le chiffrement de disque. J'ai créé un disque de 10 Go (/dev/vdb
) à utiliser pendant ce didacticiel.
Installation des outils
Commençons par installer les outils appropriés pour configurer le chiffrement :
dnf install -y cryptsetup parted
Le cryptsetup
le paquet fournit le cryptsetup
commande, que nous utiliserons pour configurer le chiffrement, tandis que la commande parted
package fournit le parted
commande de configuration de la partition.
Création de la partition
Exécution de lsblk
La commande affiche votre configuration actuelle :
[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
Nous pouvons chiffrer un périphérique de bloc entier comme /dev/vdb
, mais la création d'une partition offre plus de flexibilité car nous pouvons ajouter d'autres partitions ultérieurement.
Maintenant, nous exécutons les commandes suivantes pour créer une partition à chiffrer :
[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
Lors de l'exécution de lsblk
encore une fois, nous voyons que le dev/vdb1
partition a été ajoutée :
[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
Formater le volume avec LUKS
Le processus suivant chiffre dev/vdb1
. Pour continuer, vous devez saisir YES
en majuscules et indiquez le mot de passe deux fois :
[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.
Ensuite, nous avons besoin d'une cible pour ouvrir le volume chiffré. J'ai utilisé mybackup
comme cible, mais cette cible peut porter n'importe quel nom :
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
Exécution de lsblk
encore une fois, nous voyons :
[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
Nous pouvons également voir le mybackup
mappage du volume chiffré :
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
Créer un système de fichiers
Puisque nous pouvons maintenant accéder au volume chiffré, nous devons le formater avant de pouvoir y stocker des données. Vous pouvez choisir entre différents types de système de fichiers, comme xfs (par défaut sur Red Hat Enterprise Linux 8), ext3, ext4, etc. Par souci de simplicité, nous utiliserons xfs comme type de système de fichiers :
[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
Création du point de montage et du répertoire
Pour écrire des données sur le système de fichiers chiffré, nous devons d'abord le monter. J'ai choisi /mnt/my_encrypted_backup
être le point de montage de mes données :
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
Ensuite, nous exécutons le mount
commande :
[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.
Ici, nous obtenons un avertissement Security-Enhanced Linux (SELinux). Nous devons réétiqueter le contexte de sécurité SELinux du point de montage :
[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
Exécution du mount
commande montre à nouveau que l'avertissement a disparu :
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
Exécution de lsblk
produit à nouveau la sortie suivante :
[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
Récupération des détails LUKS
Nous pouvons maintenant vider les informations d'en-tête LUKS, la section de segment de données, les emplacements de clé utilisés, 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
Ajout d'un fichier clé et montage automatique
Le montage automatique du système de fichiers crypté LUKS a des implications sur la sécurité. Pour les utilisateurs d'ordinateurs portables, ce n'est pas un choix judicieux. Si votre appareil est volé, vos données stockées dans la partition chiffrée le sont également.
Indépendamment de l'implication de sécurité mentionnée ci-dessus, voici comment configurer le montage automatique. Tout d'abord, créez le répertoire approprié pour stocker le fichier clé :
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
Ensuite, ajoutez la clé en utilisant le cryptsetup
utilitaire :
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
Ensuite, nous devons restaurer le contexte 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
Auparavant, nous ouvrions le système de fichiers chiffré et le montions manuellement. Maintenant, nous devons voir si nous pouvons faire la même chose avec l'automatisation. Puisque notre système de fichiers est déjà monté, nous devons d'abord umount
(démonter) :
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
Essayons d'ouvrir la partition chiffrée via la ligne de commande en utilisant le fichier comme clé :
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
Ensuite, nous devons configurer /etc/crypttab
et /etc/fstab
pour monter le disque au démarrage. Nous avons d'abord besoin de l'UUID pour /dev/vdb1
(pas /dev/mapper/mybackup
), qui peut être récupéré comme suit :
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
Entrez maintenant la ligne suivante dans /etc/crypttab
afin que nous puissions ouvrir automatiquement notre système de fichiers chiffré :
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
Avec tout cela, nous pouvons maintenant configurer /etc/fstab
. Ajoutez la ligne suivante (en gras) à ce fichier :
[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**
Et, enfin, nous pouvons tester pour voir si le montage automatique fonctionne sans redémarrer la machine, en utilisant mount -a
:
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
Dans ce cas, /mnt/my_encrypted_backup
a été monté avec succès. Maintenant, redémarrez le système et assurez-vous que le montage automatique fonctionne également au redémarrage.
Réflexions finales
Il existe d'autres options qui peuvent être fournies à cryptsetup
, et chacun a des compromis en matière de vitesse et de système de fichiers plus sécurisé. Explorez les options et choisissez ce qui convient le mieux à votre situation.