Linux sans magie #51 — Chiffrer un disque avec LUKS et cryptsetup

Comprendre LUKS2 et dm-crypt, préparer un volume chiffré de laboratoire, vérifier son ouverture et protéger les clés sans confondre chiffrement et sauvegarde.

Dans le #50, nous avons vu comment diagnostiquer un RAID dégradé et pourquoi la redondance ne remplace pas les sauvegardes. Il reste une autre question : comment protéger des données si un disque est perdu, volé ou sorti de son serveur ?

Sous Linux, le chiffrement de périphérique bloc repose couramment sur dm-crypt et le format LUKS (Linux Unified Key Setup). L'outil cryptsetup prépare, ouvre et administre ces volumes. Il protège surtout la confidentialité des données au repos, à condition de protéger aussi les clés et les systèmes qui accèdent au volume déverrouillé.

Nous suivrons un laboratoire sur un disque virtuel dédié, vide et jetable. Les commandes de création de volume et de filesystem sont destructrices : elles ne doivent jamais être lancées sur un disque contenant des données utiles.

Quel problème résout le chiffrement de disque ?

Imaginons un serveur Linux qui écrit des documents sensibles sur un disque de données. Sans chiffrement, une personne ayant accès physiquement au support peut parfois le connecter à une autre machine et lire les fichiers, même sans connaître les comptes Linux d'origine.

LUKS rend les blocs stockés sur ce périphérique inexploitables sans le matériel cryptographique nécessaire et une méthode de déverrouillage autorisée. Le filesystem ne voit pas directement le disque chiffré : il voit un périphérique virtuel déchiffré créé après l'ouverture.

disque virtuel dédié : /dev/disk/by-id/<disque-lab>
                ↓
        en-tête LUKS2 + données chiffrées
                ↓   cryptsetup open (clé autorisée)
       /dev/mapper/lab_crypt
                ↓
          filesystem ext4
                ↓
            /mnt/luks-lab

Le chemin sous /dev/disk/by-id/ est un placeholder ; le nom lab_crypt est le nom local du mapping. Ne confondez jamais le périphérique brut chiffré et /dev/mapper/lab_crypt, sur lequel un filesystem peut être créé.

Comprendre dm-crypt, LUKS et LUKS2

dm-crypt est une cible du device mapper du noyau Linux : elle chiffre et déchiffre les blocs à la volée. LUKS définit un format standardisé de métadonnées permettant de gérer les clés et le déverrouillage du volume. cryptsetup est l'outil d'administration utilisé pour les deux.

LUKS2 est le format courant des distributions Linux récentes et le format par défaut documenté pour RHEL 10. Il permet de gérer plusieurs emplacements de clés (keyslots) et des métadonnées redondantes. Il ne faut pas en déduire que tout environnement ancien comprend LUKS2 : vérifiez les versions du système et de ses outils de démarrage.

Le mot de passe ne chiffre pas directement chaque bloc. Il sert à protéger l'accès à la clé de volume, laquelle est utilisée pour chiffrer les données. Plusieurs méthodes de déverrouillage peuvent donc donner accès à un même volume. La disparition de tous les moyens valides de déverrouillage rend généralement les données inaccessibles, même si les blocs du disque sont intacts.

Ce que LUKS ne protège pas

Le chiffrement au repos ne remplace ni les permissions Linux ni la surveillance des accès. Une fois le volume ouvert et monté, un compte ou processus ayant les droits nécessaires peut lire les fichiers normalement. Un administrateur compromis, un logiciel malveillant exécuté avec les bons privilèges ou une clé exposée peuvent contourner la protection recherchée.

LUKS n'assure pas à lui seul :

  • la disponibilité en cas de panne de disque ;
  • la récupération après suppression accidentelle ou rançongiciel ;
  • la cohérence applicative d'un snapshot ;
  • une preuve complète d'intégrité ou l'absence de modifications malveillantes des données.

Pour ces objectifs, prévoyez des sauvegardes indépendantes restaurables, des contrôles d'accès, de la supervision et, selon le modèle de menace, d'autres mécanismes de vérification d'intégrité.

Préparer un laboratoire sûr

L'exemple nécessite une machine Linux de test, cryptsetup installé, les privilèges d'administration, un disque virtuel supplémentaire inutilisé et un système capable de créer un filesystem ext4. Le disque système, le volume racine, un PV LVM existant, un membre RAID ou un disque comportant des données importantes sont exclus.

Avant toute écriture, effectuez l'inventaire :

lsblk -o NAME,PATH,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL,SERIAL
ls -l /dev/disk/by-id/
findmnt -o SOURCE,TARGET,FSTYPE
sudo pvs
sudo mdadm --detail --scan

Les deux dernières commandes sont utiles si LVM et MD RAID sont installés ; leur absence n'implique pas que le disque est libre. Recoupez l'inventaire avec la configuration de la VM et vérifiez les signatures existantes. Les noms /dev/sdb ou /dev/nvme1n1 peuvent changer.

Critère d'arrêt : si vous ne pouvez pas prouver que le disque identifié est jetable, ne poursuivez pas. Une sauvegarde récente ne rend pas acceptable une erreur de périphérique.

Étape 1 — Initialiser LUKS2 sur le disque jetable

La commande ci-dessous est volontairement présentée comme plan d'exécution à valider, et non comme commande à copier sur un serveur :

# DANGER : écriture destructive sur un disque de laboratoire VIDE
sudo cryptsetup luksFormat --type luks2 /dev/disk/by-id/<disque-lab>

luksFormat crée un en-tête et une nouvelle clé de volume. Cela rend une configuration antérieure du périphérique inutilisable et peut provoquer une perte de données. Ce n'est pas une manière de chiffrer en place un filesystem déjà rempli.

L'outil demande confirmation et une phrase de passe. Choisissez un secret fort, unique et récupérable par une procédure approuvée. Ne saisissez pas ce secret dans une ligne de commande conservée dans l'historique du shell. Ne le copiez pas dans un ticket, un dépôt Git ou un journal.

Pour chiffrer des données existantes, il faut une procédure de migration ou de ré-encryptage spécifique, avec sauvegarde testée et prise en compte des contraintes de taille et d'indisponibilité. Ce n'est pas le périmètre du laboratoire.

Étape 2 — Ouvrir le conteneur chiffré

Une fois le disque de laboratoire formaté et l'autorisation confirmée, la syntaxe de l'ouverture est :

sudo cryptsetup open /dev/disk/by-id/<disque-lab> lab_crypt

Après saisie de la phrase de passe valide, le système crée /dev/mapper/lab_crypt. Ce périphérique logique expose la vue déchiffrée ; il reste chiffré sur le disque physique.

Vous pouvez observer le mapping et son état :

sudo cryptsetup status lab_crypt
lsblk -f
ls -l /dev/mapper/lab_crypt

cryptsetup status peut afficher un état actif ainsi que le périphérique sous-jacent. Vérifiez que ce dernier correspond précisément au disque préparé ; ne vous fiez pas seulement au nom du mapping.

Étape 3 — Créer un filesystem sur la bonne couche

Dans un lab jetable uniquement, le filesystem doit être créé sur le périphérique déverrouillé, jamais sur le disque LUKS brut :

# DANGER : mkfs efface le contenu du mapping ciblé
sudo mkfs.ext4 /dev/mapper/lab_crypt

Un mkfs lancé par erreur sur le périphérique qui contient l'en-tête LUKS pourrait rendre le conteneur inaccessible. Une erreur de mapping peut aussi détruire un autre volume. Confirmez les chemins au moment de l'opération.

Après préparation d'un point de montage de laboratoire, le montage et ses vérifications pourraient être :

sudo mkdir -p /mnt/luks-lab
sudo mount /dev/mapper/lab_crypt /mnt/luks-lab
findmnt --target /mnt/luks-lab -o SOURCE,TARGET,FSTYPE,OPTIONS
df -hT /mnt/luks-lab
lsblk -f

Le résultat attendu est un ext4 monté depuis /dev/mapper/lab_crypt. Le périphérique brut doit être identifié comme contenant un volume crypto_LUKS, sans filesystem monté directement sur lui.

Étape 4 — Fermer proprement le volume

Il faut d'abord terminer les écritures et démonter le filesystem, puis fermer le mapping. Dans le laboratoire, les opérations seraient réalisées dans cet ordre :

sudo umount /mnt/luks-lab
sudo cryptsetup close lab_crypt

Un volume occupé peut refuser le démontage ou la fermeture. Dans ce cas, identifiez les processus et services utilisant les fichiers ; ne forcez pas une fermeture ni un démontage susceptible d'interrompre des écritures.

Pour vérifier la fermeture :

lsblk -f
sudo cryptsetup status lab_crypt

Un mapping fermé n'apparaît plus comme actif. Les blocs du disque restent chiffrés ; seul le déverrouillage autorisé les rend de nouveau lisibles.

Gérer les clés sans perdre l'accès

LUKS prend en charge plusieurs keyslots, ce qui permet par exemple d'organiser une méthode de récupération séparée de la phrase de passe quotidienne. Avant toute rotation, examinez l'état des métadonnées :

sudo cryptsetup luksDump /dev/disk/by-id/<disque-lab>

luksDump affiche les informations de format et de keyslots ; ne publiez pas son résultat brut sans évaluer les métadonnées qu'il révèle. Pour tester une phrase de passe sans monter le volume, la documentation décrit cryptsetup open --test-passphrase, à utiliser sur le bon périphérique.

Les opérations luksAddKey, luksChangeKey et luksRemoveKey modifient les accès possibles au volume. Une erreur peut supprimer le dernier moyen de déverrouillage. Avant toute suppression d'un ancien secret, vérifiez explicitement que le nouveau moyen fonctionne et qu'une procédure de récupération indépendante existe.

Sauvegarder l'en-tête LUKS

L'en-tête contient des informations indispensables au déverrouillage. Sa destruction peut rendre les données illisibles même si les blocs chiffrés sont intacts. Sur un volume correctement identifié, une procédure encadrée peut utiliser :

# Copie de métadonnées sensibles : chemin sécurisé à définir
sudo cryptsetup luksHeaderBackup /dev/disk/by-id/<disque-lab> \
  --header-backup-file /chemin-securise/luks-lab.header

Cette sauvegarde d'en-tête n'est pas une sauvegarde des fichiers. Elle est sensible : une ancienne copie peut contenir des keyslots ou autoriser le déverrouillage avec un secret ultérieurement révoqué. Stockez-la dans un emplacement chiffré, contrôlé et séparé, avec une politique de conservation et de destruction adaptée.

Une restauration d'en-tête (luksHeaderRestore) écrase des métadonnées critiques : elle exige une procédure spécialisée, l'identification du bon volume et une vérification de compatibilité. Ne la testez jamais au hasard sur un disque actif.

Redémarrage et montage automatique

En production, /etc/crypttab, /etc/fstab, les identifiants de volumes et, parfois, l'initramfs interviennent dans le déverrouillage et le montage au démarrage. La méthode dépend de la distribution, du gestionnaire d'initialisation et de l'usage (disque de données ou racine système).

Une entrée mal configurée peut empêcher le montage attendu, retarder ou bloquer un démarrage, ou exposer un secret si un fichier de clé est stocké sans protection. Ce laboratoire n'active aucun déverrouillage automatique. Planifiez cette étape séparément, avec accès console de secours et tests de redémarrage.

Bonnes pratiques de sécurité

Documentez le modèle de menace : vol de disque, perte d'un ordinateur, retrait d'un volume cloud, compromission de l'hôte ou accès administrateur. Le chiffrement au repos traite surtout les premiers cas ; il ne supprime pas les risques liés à un système déjà démarré et déverrouillé.

Privilégiez une phrase de passe robuste, une procédure de récupération testée, une mise à jour suivie des outils et un inventaire précis des UUID. Ne transmettez pas les clés via des scripts en clair. Les fichiers de sauvegarde d'en-tête et les clés de récupération doivent être protégés au même niveau que les données.

Enfin, chiffrement et sauvegarde répondent à des objectifs différents. Sauvegardez les données avec une stratégie prévoyant confidentialité, disponibilité, restauration et conservation ; testez effectivement cette restauration.

Limites et retour arrière

Ce guide se limite à un disque virtuel de laboratoire, neuf et dédié, avec LUKS2 et ext4. Le chiffrement de racine, les secrets TPM2, les clés réseau, les conteneurs, les thin LVs, les ensembles RAID et le ré-encryptage de volumes déjà utilisés nécessitent des procédures adaptées.

Il n'existe pas de commande de « rollback » sûre qui annule un luksFormat exécuté sur le mauvais disque. En cas de doute sur la cible, arrêtez les écritures, conservez l'état et utilisez une restauration indépendante ou une expertise de récupération. Supprimer le mapping ne déchiffre ni ne restaure les données précédemment présentes.

Références officielles

Conclusion

LUKS2 et cryptsetup rendent possible la confidentialité d'un volume Linux au repos, à condition de séparer correctement disque brut chiffré, mapping déverrouillé et filesystem. La réussite repose autant sur les clés, la vérification du bon périphérique et le plan de récupération que sur la commande d'initialisation.

Dans le #52, nous reviendrons au dépannage quotidien avec le diagnostic d'un disque plein sous Linux, à l'aide de df, du, find et lsof.