Cryptsetup

De Wiki doc

Révision datée du 27 décembre 2020 à 20:11 par Ycharbi (discussion | contributions) (Ajout d'une source pour le déchiffrement automatique + ajout de la section "Gestion des clef" + ajout d'une commande pour tester le "crypttab" en le parcourant.)

Cryptsetup est l'implémentation du standard LUKS sur la plupart des distributions Linux. Il permet de chiffrer des périphériques de type bloc. Dans les distributions Debian, il est fournit par le paquet cryptsetup.

Mise en œuvre

Voici un exemple de mise en œuvre de cryptsetup décrivant la création, le montage et le démontage d'un volume chiffré.

ASTUCE

Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande cryptsetup benchmark.

Chiffrement du disque sdc dans son intégralité (écrase tout dessus). Taper YES (en majuscule) et entrer le mot de passe de déchiffrement 2 fois

cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdc

Ouvrir le volume (ça fait un volume "montable" dans /dev/mapper/sdc_crypt)

cryptsetup luksOpen /dev/sdc sdc_crypt

Créer le système de fichier

mkfs.ext4 /dev/mapper/sdc_crypt

Monter le volume

mount /dev/mapper/sdc_crypt /mnt

Démonter le volume

umount /mnt

Fermer le volume

cryptsetup luksClose sdc_crypt

Afficher les détails du volume (type de chiffrement notamment)

cryptsetup luksDump /dev/sdc

Gestion des clef

Cryptsetup n'utilise pas réellement le mot de passe que vous avez fourni pour chiffrer le volume. Il génère lui même une clé qu'il va chiffrer avec l'un des moyens que vous lui fournissez (mot de passe ou fichier de clef). Ceci permet de pouvoir non seulement changer de mot de passe sans re-chiffrer tout le volume (seul la clef maitraisse l'est), mais également d'en avoir plusieurs.

Changement de clef

cryptsetup luksChangeKey /dev/sdc

Si vous avez plusieurs clefs d'enregistrées, vous pouvez sélectionner le crénau contenant celle à changer en ajoutant le paramètre suivant

cryptsetup luksChangeKey /dev/sdc -S 2

Les crénaux sont visualisables avec la commande

cryptsetup luksDump /dev/sdc

Ajout d'une clef

cryptsetup luksAddKey /dev/sdc

Suppression d'une clef

cryptsetup luksRemoveKey /dev/sdc

Source de la section

Déchiffrement automatique

Si vous avez plusieurs volumes chiffrés, il est possible d'utiliser des fichiers de clef présent sur le premier pour déchiffrer les autres. Nous allons partir du principe que mon premier disque de démarrage (chiffré) est vda et que le second est vdb.

Création du répertoire de travail

mkdir /root/luks

Création du fichier de clé

dd if=/dev/urandom of=/root/luks/fichier_clef.luks bs=4096 count=1

Attribution des droits

chmod 500 luks/
chmod 400 luks/fichier_clef

Un volume LUKS peut gérer plusieurs mots de passes/clefs, nous allons donc ajouter celle que nous avons créé à notre deuxième disque

cryptsetup luksAddKey /dev/vdb /root/luks/fichier_clef.luks

Récupération de l'UUID de vdb

export UUID_LUKS=$(blkid -s UUID -o value /dev/vdb)

Ajout d'une entrée dans le fichier de déchiffrement

echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab

Note : le paramètre discard permet d'autoriser les commandes TRIM pour les SSD. Cela n'a pas de sens si vous utilisez des disques durs.

INFORMATION

Le fichier /etc/crypttab va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l'utilisateur (c'est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d'accès est un fichier de clef, Cryptsetup va le soumettre au volume et si il correspond à celui de sa bibliothèque, il se déchiffre.

À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la commande cryptdisks_start vbd_luks pour parcourir la ligne du fichier crypttab et en appliquer les directives (c'est ce que fait init au démarrage) afin de tester votre configuration immédiatement.

Il est également possible d’enchaîner avec un montage automatique du système de fichier via le /etc/fstab.

Déchiffrer manuellement le volume LUKS

cryptsetup luksOpen /dev/vdb vbd_luks

Formater la partition

mkfs.btrfs -n 32K /dev/mapper/vbd_luks

Ajouter une une entrée dans le fstab

echo "/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0" >> /etc/fstab

Au redémarrage, le volume sera automatiquement déchiffré et monté dans /mnt/.

Source de la section