Les vacances d'hiver ont été un bon moment pour accomplir des choses qui ont été repoussées trop longtemps. L'une d'elles était d'activer le chiffrement complet du disque sur mon ordinateur portable de travail.
J'utilise Debian Linux, donc LUKS (Linux Unified Key Setup) était un choix évident.

Image avec l'aimable autorisation de Linux.com
Le moyen le plus simple d'activer le chiffrement complet du disque est (évidemment) lors de la réinstallation du système, mais j'ai passé trop de temps à construire un environnement de travail confortable, alors j'ai essayé (et réussi - spoiler !) de chiffrer le système existant.
Le processus était en grande partie basé sur excellent article de William Desportes, mais comme mon expérience était légèrement différente, j'ai décidé de la publier ici.
Avant de continuer
- Ne pas utiliser luksipc (conversion en place LUKS) - c'est un outil obsolète, et même son auteur recommande d'utiliser cryptsetup (partie du paquet du même nom) sur la dernière version du readme du paquet
- Sauvegardez les fichiers importants avant de continuer (cette partie est évidente mais il n'est jamais inutile de le répéter)
Préparer la machine cible
Installer les paquets nécessaires :
sudo apt install cryptsetup cryptsetup-initramfsAjoutez la ligne suivante à /etc/default/grub :
GRUB_ENABLE_CRYPTODISK=yPréparez un périphérique amorçable
J'ai pris une version Xfce du répertoire Debian Live, mais vous pouvez prendre n'importe quelle autre image Live CD moderne et raisonnable (vous pouvez utiliser Ubuntu Live CD pour chiffrer Debian, ou vice versa, ou même prendre une image basée sur RedHat)
Préparez le script de chiffrement
Enregistrez le script suivant sous le nom encryptdrive.sh sur une autre clé USB (l'image Live est généralement en lecture seule) pour éviter de le taper lorsque vous êtes dans Debian Live :
#!/bin/bash
set -euo pipefail
# Décommentez pour déboguer/inspecter les commandes
#set -x
# Chiffrez une partition existante avec LUKS2 sur Debian 12
# AVERTISSEMENT : UTILISEZ À VOS RISQUES ET FAITES DES SAUVEGARDES
# Fait pour mon usage personnel et avec presque AUCUNE vérification des erreurs !!
# Basé sur les instructions de :
# https://wiki.archlinux.org/index.php/dm-crypt/Device_encryption#Encrypt_an_existing_unencrypted_filesystem
DISK="${1:-}"
if [ -z "$DISK" ]; then
echo "Usage : $ /dev/sdXY"
exit 1
fi
# Effectuez une vérification du système de fichiers
e2fsck -f "$DISK"
# Réduisez légèrement le système de fichiers pour faire de la place pour l'en-tête LUKS
BLOCK_SIZE=`dumpe2fs -h $DISK | grep "Block size" | cut -d ':' -f 2 | tr -d ' '`
BLOCK_COUNT=`dumpe2fs -h $DISK | grep "Block count" | cut -d ':' -f 2 | tr -d ' '`
SPACE_TO_FREE=$((1024 * 1024 * 32)) # 32MB devraient suffire, mais ajoutez une marge de sécurité
NEW_BLOCK_COUNT=$(($BLOCK_COUNT - $SPACE_TO_FREE / $BLOCK_SIZE))
resize2fs -p "$DISK" "$NEW_BLOCK_COUNT"
# Effectuez le processus de chiffrement
# MAN : https://man7.org/linux/man-pages/man8/cryptsetup-reencrypt.8.html
cryptsetup reencrypt --encrypt --reduce-device-size 32M "$DISK"
# Redimensionnez le système de fichiers pour occuper l'espace restant (c'est-à-dire supprimez la marge de sécurité de tout à l'heure)
cryptsetup open "$DISK" recrypt
resize2fs /dev/mapper/recrypt
cryptsetup close recrypt
# N'oubliez pas de mettre à jour /etc/crypttab et /etc/fstab si nécessaire !
#
# Par exemple :
# /etc/crypttab
# crypt_root UUID=xxx none luks
# /etc/fstab
# /dev/mapper/crypt_root / ext4 errors=remount-ro 1
#
# N'oubliez pas de lancer "update-initramfs -u -k all" après avoir mis à jour le crypttab rootfsDémarrez maintenant en utilisant le périphérique préparé dans Debian Live pour éviter de monter vos systèmes de fichiers principaux
Étapes à effectuer une fois démarré dans Debian Live
Trouvez la/les partition(s) que vous souhaitez chiffrer :
sudo fdisk -lSur les ordinateurs portables plus récents avec SSD, les noms de disque seront quelque chose comme /dev/nvme, sur les anciens /dev/sda, /dev/sdb etc.
Commencez le chiffrement avec encrypdrive.sh enregistré précédemment
Pour moi, c'était /dev/nvmen1p2 (/dev/nvmen1p1 réservé pour la partition EFI). À partir de maintenant, supposons que c'est également le cas pour vous. Si votre partition principale est différente, remplacez simplement le nom du périphérique en conséquence)
sudo /bin/bash encryptdrive.sh /dev/nvmen1p2Cela prendra un certain temps, selon la vitesse de votre système et la taille du disque
Important : convertissez le lecteur au format LUKS1
GRUB ne supporte pas bien le format LUKS2, il vaut donc mieux s'en tenir à la version la plus sûre.
Ces opérations sont beaucoup plus rapides que le chiffrement lui-même, car elles ne changent que l'en-tête de chiffrement.
sudo cryptsetup luksConvertKey --pbkdf pbkdf2 /dev/nvmen1p2
sudo cryptsetup convert --type luks1 /dev/nvmen1p2Ajustez les paramètres de démarrage sur le lecteur chiffré :
export DEVICE_NAME="root_crypt"
cryptsetup open /dev/nvmen1p2 ${DEVICE_NAME}
mkdir /mnt/${DEVICE_NAME}
mount /dev/mapper/${DEVICE_NAME} /mnt/${DEVICE_NAME}
mount -t proc none /mnt/${DEVICE_NAME}/proc
mount -t sysfs none /mnt/${DEVICE_NAME}/sys
mount --bind /dev /mnt/${DEVICE_NAME}/devChroot vers le lecteur chiffré
chroot /mnt/${DEVICE_NAME}Étapes à effectuer dans l'environnement chrooté
- Si vous avez une partition EFI (/boot/efi), montez-la :
mount /dev/nvmen1p1 /boot/efi(vérifiez le nom du périphérique avecsudo fdisk -l - lancez
blkid -o value -s UUID /dev/nvmen1p2et gardez la valeur - modifiez
/etc/crypttabet ajoutez la ligne suivante :root_crypt UUID=none luks - Exemple :
root_crypt UUID=24bfb42b-007d-4777-9889-46d3e016e60b none luks
- Exemple :
- Réinstallez grub
sudo grub-install /dev/nvme(Comme William, je ne suis pas sûr que cette étape soit nécessaire) - Mettez à jour initramfs :
sudo update-initramfs -k all -u - Mettez à jour le chargeur de démarrage avec
sudo update-grub - Sortez du chroot avec
exit
Nettoyage final
sudo umount /mnt/${DEVICE_NAME}/proc
sudo umount /mnt/${DEVICE_NAME}/sys
sudo umount /mnt/${DEVICE_NAME}/dev
sudo umount /mnt/${DEVICE_NAME}/boot/efi
sudo umount /mnt/${DEVICE_NAME}
sudo cryptsetup close ${DEVICE_NAME}
sudo rmdir -v /mnt/${DEVICE_NAME}C'est tout. Vous devriez être prêt à redémarrer dans un environnement plus sécurisé.
Profitez-en !