LUKS

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Chiffrement de disque (dm-crypt)
Commande cryptsetup
Contexte Chiffrer une partition ou un disque externe (ex. support de sauvegarde amovible) — lisible depuis n'importe quel Linux disposant des paquets requis et du mot de passe
Voir aussi Iptables (autre brique de sécurisation système)

LUKS (Linux Unified Key Setup) est le format standard de chiffrement de disque sous Linux, géré via la commande cryptsetup (basée sur dm-crypt). Il permet de chiffrer l'accès à un système de fichiers entier : la partition n'est lisible qu'après déverrouillage avec un mot de passe (ou une clé), ce qui en fait un choix courant pour un disque de sauvegarde externe destiné à être externalisé.

Installation

apt-get install cryptsetup       # Debian/Ubuntu
yum install cryptsetup-luks      # RHEL/CentOS

modprobe aes
modprobe dm_crypt
modprobe dm_mod

Créer un volume chiffré

Chiffrement de la partition /dev/sdb1 :

cryptsetup luksFormat /dev/sdb1

La commande demande de taper YES (en majuscules) pour confirmer, puis de saisir la phrase de passe :

WARNING!
========
Cette action écrasera définitivement les données sur /dev/sdb1.

Are you sure? (Type uppercase yes): YES
Entrez la phrase de passe LUKS :
Verify passphrase:

⚠️ luksFormat écrase l'en-tête existant — toute donnée déjà présente sur la partition devient irrécupérable. Si la partition contenait des données sensibles avant chiffrement et que le disque doit être réutilisé/revendu, un shred préalable permet de forcer l'écrasement effectif :

shred -v -n1 /dev/sdb1

Note : un volume LUKS peut stocker jusqu'à 8 clés (« key slots ») — voir Gestion des clés pour en ajouter une (utile notamment pour le montage automatique).

Ouvrir et fermer un volume chiffré

cryptsetup luksOpen /dev/sdb1 usbdisk    # déverrouille, demande la phrase de passe
mkfs.ext3 -L usbdisk /dev/mapper/usbdisk # à faire une seule fois, juste après le premier luksFormat

cryptsetup -v status usbdisk             # état du mapping
cryptsetup luksClose usbdisk             # reverrouille et supprime le device mapper

luksOpen crée un périphérique dans /dev/mapper/ (ici /dev/mapper/usbdisk) : c'est ce périphérique qu'il faut monter, pas la partition brute :

mount -t ext3 /dev/mapper/usbdisk /mnt/usbdisk

Pour visualiser l'en-tête et les caractéristiques du volume (algorithme, key slots utilisés, UUID…) :

cryptsetup luksDump /dev/sdb1
cryptsetup luksUUID /dev/sdb1

Montage automatique au démarrage

Générer un fichier de clé à partir de données aléatoires, accessible uniquement à root, puis l'ajouter comme clé LUKS :

dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
chmod 400 /root/keyfile

cryptsetup luksAddKey /dev/sdb1 /root/keyfile

La phrase de passe existante est demandée pour autoriser l'ajout de cette nouvelle clé dans un key slot libre.

Éditer /etc/crypttab pour que le volume soit déverrouillé automatiquement au boot :

# <target name>  <source device>   <key file>     <options>
usbdisk           /dev/sdb1         /root/keyfile  luks,checkargs=ext2

Puis /etc/fstab, comme pour un montage classique, en pointant vers le périphérique mappé :

/dev/mapper/usbdisk   /mnt/usbdisk   ext3   defaults   0 0

Gestion des clés

Changer la phrase de passe d'un key slot existant :

cryptsetup luksChangeKey /dev/mapper/volgroup1_vg-vol01_lv

Ajouter une seconde clé dans un slot précis (après avoir vérifié les slots déjà occupés avec luksDump) :

cryptsetup luksDump /dev/mapper/volgroup1_vg-vol01_lv
cryptsetup luksAddKey --key-slot 1 /dev/mapper/volgroup1_vg-vol01_lv

Sauvegarde et restauration de l'en-tête LUKS

cryptsetup luksHeaderBackup /dev/mapper/volgroup1_vg-vol01_lv --header-backup-file /backup/vol01_lv-luks.backup
cryptsetup luksHeaderRestore /dev/mapper/volgroup1_vg-vol01_lv --header-backup-file /backup/vol01_lv-luks.backup

⚠️ L'en-tête LUKS (algorithme, salt, et les key slots chiffrés) est indispensable au déverrouillage : s'il est corrompu ou écrasé, les données restent inaccessibles **même avec la bonne phrase de passe**. Il est donc recommandé de faire une sauvegarde de l'en-tête juste après le luksFormat initial (et de la stocker à part, sur un support différent de celui qu'elle protège) — c'est le seul filet de sécurité en cas de corruption de l'en-tête ou de key slot effacé par erreur.

Voir aussi

  • Iptables — autre commande à la frontière sécurité/système