Aller au contenu
Administration Linux medium

Chiffrer un disque avec LUKS et cryptsetup

10 min de lecture

LUKS (Linux Unified Key Setup) chiffre un disque entier au niveau bloc : sans la passphrase, les données sont illisibles, même si le disque est volé. L'outil standard est cryptsetup. Ce guide montre comment chiffrer un volume avec LUKS2, gérer plusieurs passphrases, sauvegarder l'en-tête (vital), et déverrouiller au démarrage via /etc/crypttab ou un serveur réseau (NBDE). Pour administrateurs intermédiaires à avancés, sur Debian, Ubuntu ou RHEL. Commandes testées sur AlmaLinux 10.

  • Chiffrer un volume avec cryptsetup luksFormat (LUKS2)
  • Ouvrir, formater et monter le volume déchiffré
  • Gérer les passphrases et sauvegarder l'en-tête
  • Déverrouiller au boot avec crypttab, et automatiquement avec Clevis/Tang
  • Un serveur Linux avec sudo et le paquet cryptsetup
  • Un disque, une partition ou un fichier conteneur dédié (le chiffrement écrase son contenu)
  • Savoir identifier un disque et le monter

Depuis cryptsetup 2.1, le format par défaut est LUKS2, et c'est celui à utiliser. Il apporte un en-tête redondant (stocké en double, donc plus résistant à la corruption) et la dérivation de clé Argon2id, conçue pour résister au cassage par GPU, là où LUKS1 se limite à PBKDF2. LUKS2 porte aussi jusqu'à 32 emplacements de clé (key slots) contre 8 pour LUKS1.

L'ordre est immuable : formater, ouvrir, créer le système de fichiers sur le mapping, monter. Le système de fichiers se met toujours sur /dev/mapper/..., jamais sur le disque brut.

  1. Formater le volume en LUKS2. L'opération demande une confirmation (YES) et la passphrase.

    Fenêtre de terminal
    sudo cryptsetup luksFormat --type luks2 /dev/sdX

    Les valeurs par défaut sont sûres et confirmées par luksDump ci-dessous : chiffrement aes-xts-plain64, clé de 512 bits (soit AES-256, la clé XTS étant doublée), dérivation Argon2id.

  2. Inspecter l'en-tête pour vérifier le format.

    Fenêtre de terminal
    sudo cryptsetup luksDump /dev/sdX
    Version: 2
    Keyslots:
    0: luks2
    Cipher: aes-xts-plain64
    Cipher key: 512 bits
    PBKDF: argon2id
  3. Ouvrir le volume : il apparaît sous /dev/mapper/.

    Fenêtre de terminal
    sudo cryptsetup open /dev/sdX coffre
  4. Créer le système de fichiers et monter le mapping.

    Fenêtre de terminal
    sudo mkfs.ext4 /dev/mapper/coffre
    sudo mkdir -p /mnt/coffre
    sudo mount /dev/mapper/coffre /mnt/coffre

Pour fermer le volume après démontage : sudo umount /mnt/coffre && sudo cryptsetup close coffre. Les données redeviennent illisibles sans la passphrase.

LUKS2 stocke jusqu'à 32 passphrases indépendantes dans des key slots : pratique pour donner un accès personnel à plusieurs administrateurs, puis révoquer l'un d'eux sans changer les autres.

Fenêtre de terminal
sudo cryptsetup luksAddKey /dev/sdX # ajouter une passphrase (une passphrase valide est demandée)
sudo cryptsetup luksChangeKey /dev/sdX # remplacer une passphrase
sudo cryptsetup luksRemoveKey /dev/sdX # supprimer la passphrase saisie
sudo cryptsetup luksKillSlot /dev/sdX 2 # supprimer le slot numéro 2 (autre passphrase requise)
sudo cryptsetup luksDump /dev/sdX # voir les slots occupés

Pour un déverrouillage automatisé, on peut enrôler un fichier-clé plutôt qu'une passphrase :

Fenêtre de terminal
sudo dd if=/dev/urandom of=/root/luks.key bs=512 count=4
sudo chmod 0400 /root/luks.key
sudo cryptsetup luksAddKey /dev/sdX /root/luks.key

L'en-tête LUKS contient les clés chiffrées : s'il est corrompu, toutes les données sont perdues, même avec la bonne passphrase. Une écriture accidentelle sur le début du disque (un mkfs malheureux) suffit. Sauvegardez-le hors-ligne :

Fenêtre de terminal
sudo cryptsetup luksHeaderBackup /dev/sdX --header-backup-file /secours/header.img

Sur LUKS2, ce fichier fait 16 Mio. Restauration : cryptsetup luksHeaderRestore.

Pour qu'un volume chiffré soit disponible au boot, déclarez-le dans /etc/crypttab, qui crée le mapping /dev/mapper/, puis montez ce mapping via /etc/fstab (jamais le disque brut).

Récupérez l'UUID du volume chiffré, puis ajoutez la ligne (quatre champs : nom, périphérique, clé, options) :

Fenêtre de terminal
sudo cryptsetup luksUUID /dev/sdX
/etc/crypttab
coffre UUID=5cda3d09-88cd-4c5e-941f-347749dd8025 none luks

La clé none demande la passphrase interactivement au démarrage ; remplacez-la par un chemin de fichier-clé pour un déverrouillage sans saisie. Le côté /etc/fstab monte ensuite le mapping :

/etc/fstab
/dev/mapper/coffre /mnt/coffre ext4 defaults,nofail 0 2

Après modification, régénérez l'initramfs pour que le déverrouillage fonctionne tôt au boot :

Fenêtre de terminal
sudo update-initramfs -u

Saisir une passphrase à chaque démarrage est impraticable sur un parc de serveurs. Le NBDE (Network-Bound Disk Encryption) déverrouille automatiquement un volume tant que la machine atteint un serveur Tang sur le réseau, sans jamais transmettre la clé. Le client est Clevis, le serveur Tang ; l'état est stocké dans l'en-tête LUKS2.

Sur le serveur, Tang s'active comme un service :

Fenêtre de terminal
sudo systemctl enable tangd.socket --now

Sur la machine à chiffrer, liez le volume au Tang. Au prochain boot, il s'ouvrira seul s'il joint le serveur :

Fenêtre de terminal
sudo clevis luks bind -d /dev/sdX tang '{"url":"http://tang.interne.lan"}'
sudo clevis luks list -d /dev/sdX

Variante sans réseau : lier le volume à la puce TPM2 de la machine (clevis luks bind -d /dev/sdX tpm2 '{"pcr_ids":"7"}'). On peut même exiger Tang ET TPM2 simultanément via la pin sss. La sécurité du NBDE repose sur le fait qu'un attaquant a besoin du disque physique et de l'accès au réseau du Tang.

Avec l'accélération AES-NI présente sur tout CPU moderne, le surcoût du chiffrement est négligeable devant la vitesse d'un disque. Mesurez-le sur votre matériel :

Fenêtre de terminal
cryptsetup benchmark

Par défaut, le TRIM/discard est désactivé sur les volumes chiffrés. L'activer (cryptsetup open --allow-discards ou l'option discard dans crypttab) améliore les performances et la longévité d'un SSD, mais révèle au niveau physique quels blocs sont utilisés (type de système de fichiers, espace occupé). Sur un système sensible, laissez-le désactivé ; activez-le en connaissance de cause.

  • Perte de l'en-tête = perte totale : sauvegardez-le hors-ligne, c'est non négociable.
  • LUKS protège au repos seulement : une fois le volume déverrouillé et monté, les fichiers sont en clair pour tout processus autorisé. LUKS protège contre le vol du disque, pas contre un accès au système en marche.
  • Système de fichiers sur le mauvais device : toujours mkfs sur /dev/mapper/..., jamais sur le disque chiffré brut (cela détruirait l'en-tête).
  • Bloc contre fichier : LUKS chiffre tout le volume (idéal disque, partition, swap). Pour chiffrer un sous-dossier synchronisé dans un cloud, un outil par fichier comme gocryptfs est plus adapté. Évitez eCryptfs, déprécié.
  • /boot chiffré et GRUB : un ancien GRUB ne gère pas Argon2id ; pour une racine chiffrée, validez le couple bootloader / version sur votre distribution.
SymptômeCause probableSolution
No key available with this passphraseMauvaise passphrase ou mauvais slotEssayer une autre passphrase, vérifier luksDump
Volume non déverrouillé au bootcrypttab/initramfs non régénéréCorriger crypttab, update-initramfs/dracut
Device coffre already existsMapping déjà ouvertcryptsetup close coffre avant de réouvrir
Données illisibles après incidentEn-tête corrompucryptsetup luksHeaderRestore depuis la sauvegarde
Lenteur à l'ouvertureArgon2id consomme RAM/CPUNormal (anti-brute-force) ; ajuster --pbkdf-memory à la création
  • LUKS2 est le format par défaut (Argon2id, en-tête redondant, 32 slots) : utilisez-le.
  • L'ordre est format → open → mkfs sur le mapping → mount → close.
  • Les défauts sont sûrs : aes-xts-plain64, clé 512 bits (AES-256), Argon2id.
  • Sauvegardez l'en-tête (luksHeaderBackup, 16 Mio) hors-ligne : sa perte = perte totale.
  • Déverrouillage au boot via /etc/crypttab (par UUID) + fstab + initramfs ; automatique avec Clevis/Tang (NBDE) ou TPM2.
  • LUKS protège au repos : une fois monté, les données sont en clair pour le système.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn