« Cryptsetup » : différence entre les versions
(Réorganisation + aération du code + ajout de la section "Déchiffrement automatique".) |
(→Gestion des clef : Ajout de la section "Tester une clef") |
||
(2 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 28 : | Ligne 28 : | ||
Afficher les détails du volume (type de chiffrement notamment) | Afficher les détails du volume (type de chiffrement notamment) | ||
cryptsetup luksDump /dev/sdc | 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éneaux 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 | |||
==Tester une clef== | |||
Lorsqu'un volume est en cours d'utilisation, il peut arriver que vous soyez dans le doute concernant la clé utilisée pour le dé-chiffrer. Afin de la tester sans fermer le volume (et donc d'être dans l'incapacité de récupérer les données si vous avez perdu la clef), il est possible de copier la partie ''Luks'' dans un fichier et d'effectuer les tests dessus. | |||
head -c 128M /dev/sda2 > /tmp/sda2.img | |||
cryptsetup luksOpen /tmp/sda2.img testClef | |||
Il est également possible d'utiliser un fichier de clef si vous en avez [[#Déchiffrement_automatique|ajouté-un]] dans votre volume | |||
cryptsetup luksOpen /tmp/sda2.img testClef --key-file /root/fichier_clef.luks | |||
Si le volume se déverrouille c'est que vous avez renseigné la bonne clef. Vous pouvez le fermer | |||
cryptsetup luksClose testClef | |||
{{astuce|Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande <syntaxhighlight lang="bash" inline>file -sL /tmp/sda2.img</syntaxhighlight>.}} | |||
==Source de la section== | |||
* https://www.maketecheasier.com/change-luks-encryption-passphrase/ | |||
* https://unix.stackexchange.com/questions/590849/how-can-i-verify-a-luks-master-key | |||
* https://www.cyberciti.biz/hardware/cryptsetup-add-enable-luks-disk-encryption-keyfile-linux/ | |||
=Fichier crypttab= | |||
Le fichier <source lang="bash" inline>/etc/crypttab</source> est aux volumes chiffrés ce qu'est son homologue [[fstab]] aux systèmes de fichiers (il en partage d'ailleurs les mêmes [[fstab#Options de montages|options]]). Il est lu au démarrage par ''Cryptsetup'' afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l'utilisateur sera invité à la rentrée, si c'est une clef sous [[#Déchiffrement automatique|forme de fichier]], celui-ci sera exploité depuis l'emplacement précisé dans la ligne. | |||
Une entrée ''crypttab'' comporte 4 champs : | |||
<nom_du_volume> <périphérique_bloc> <fichier_de_clef> <options> | |||
Explications : | |||
* '''<nom_du_volume>''' : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans <source lang="bash" inline>/dev/mapper/<nom_du_volume></source> | |||
* '''<périphérique_bloc>''' : chemin ou ''UUID'' du périphérique à déchiffrer (même syntaxe que pour ''fstab'') | |||
* '''<fichier_de_clef>''' : chemin du fichier de clef. Mettre '''none''' si une identification par mot de passe est préférée | |||
* '''<options>''' : prends le paramètre obligatoire '''luks''' suivit de divers options facultatives identiques au ''fstab'' | |||
=Déchiffrement automatique= | =Déchiffrement automatique= | ||
Ligne 51 : | Ligne 100 : | ||
echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab | echo "vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard" >> /etc/crypttab | ||
Le paramètre <source lang="bash" inline>discard</source> permet d'autoriser les commandes ''TRIM'' pour les ''SSD''. Cela n'a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d'ajouter l'option <source lang="bash" inline>nofail</source> qui permettra au système de ne pas se bloquer s'il ne trouve pas le périphérique. La commande <source lang="bash" inline>cryptdisks_start <nom_du_volume></source> devra alors être utilisée pour déchiffrer le volume. | |||
{{info|Le fichier <source lang="bash" inline>/etc/crypttab</source> 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 | {{info|Le fichier <source lang="bash" inline>/etc/crypttab</source> 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 le déchiffre.}} | ||
À ce stade, le volume se déchiffrera automatiquement au démarrage. | À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la [https://serverfault.com/questions/714605/can-cryptsetup-read-mappings-from-etc-crypttab commande] <source lang="bash" inline>cryptdisks_start vbd_luks</source> 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 [[fstab|montage automatique]] du système de fichier via le <source lang="bash" inline>/etc/fstab</source>. | Il est également possible d’enchaîner avec un [[fstab|montage automatique]] du système de fichier via le <source lang="bash" inline>/etc/fstab</source>. | ||
Ligne 69 : | Ligne 118 : | ||
Au redémarrage, le volume sera automatiquement déchiffré et monté dans <source lang="bash" inline>/mnt/</source>. | Au redémarrage, le volume sera automatiquement déchiffré et monté dans <source lang="bash" inline>/mnt/</source>. | ||
==Source de la section== | |||
* https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile |
Version du 28 mars 2022 à 12:13
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 commandecryptsetup 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éneaux 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
Tester une clef
Lorsqu'un volume est en cours d'utilisation, il peut arriver que vous soyez dans le doute concernant la clé utilisée pour le dé-chiffrer. Afin de la tester sans fermer le volume (et donc d'être dans l'incapacité de récupérer les données si vous avez perdu la clef), il est possible de copier la partie Luks dans un fichier et d'effectuer les tests dessus.
head -c 128M /dev/sda2 > /tmp/sda2.img cryptsetup luksOpen /tmp/sda2.img testClef
Il est également possible d'utiliser un fichier de clef si vous en avez ajouté-un dans votre volume
cryptsetup luksOpen /tmp/sda2.img testClef --key-file /root/fichier_clef.luks
Si le volume se déverrouille c'est que vous avez renseigné la bonne clef. Vous pouvez le fermer
cryptsetup luksClose testClef
ASTUCE
Vous pouvez afficher les algorithmes utilisés pour un volume avec la commandefile -sL /tmp/sda2.img
.Source de la section
- https://www.maketecheasier.com/change-luks-encryption-passphrase/
- https://unix.stackexchange.com/questions/590849/how-can-i-verify-a-luks-master-key
- https://www.cyberciti.biz/hardware/cryptsetup-add-enable-luks-disk-encryption-keyfile-linux/
Fichier crypttab
Le fichier /etc/crypttab
est aux volumes chiffrés ce qu'est son homologue fstab aux systèmes de fichiers (il en partage d'ailleurs les mêmes options). Il est lu au démarrage par Cryptsetup afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l'utilisateur sera invité à la rentrée, si c'est une clef sous forme de fichier, celui-ci sera exploité depuis l'emplacement précisé dans la ligne.
Une entrée crypttab comporte 4 champs :
<nom_du_volume> <périphérique_bloc> <fichier_de_clef> <options>
Explications :
- <nom_du_volume> : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans
/dev/mapper/<nom_du_volume>
- <périphérique_bloc> : chemin ou UUID du périphérique à déchiffrer (même syntaxe que pour fstab)
- <fichier_de_clef> : chemin du fichier de clef. Mettre none si une identification par mot de passe est préférée
- <options> : prends le paramètre obligatoire luks suivit de divers options facultatives identiques au fstab
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
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. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d'ajouter l'option nofail
qui permettra au système de ne pas se bloquer s'il ne trouve pas le périphérique. La commande cryptdisks_start <nom_du_volume>
devra alors être utilisée pour déchiffrer le volume.
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 le 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/
.