Déverrouillage Automatique Partition Principale
Pour réaliser ce tuto il est nécessaire d'avoir au préalable créé la partition principale chiffrée avec LUKS.
Voir Partitionnement des disques + Chiffrement (avancé)
Le but de ce tuto est de pouvoir déverrouiller la partition principale d'un serveur avec une clé USB. La clé USB contiendra un fichier qui correspondra à une clé accepté par LUKS.
L'automatisation du déverrouillage d'une partition chiffrée au démarrage peut-être mis en place en suivant les étapes suivantes :
- 1/ Création d'un fichier de clé random
- 2/ Ajouter le fichier de clé à la partition LUKS
- 3/ Créer le script de déverrouillage
- 4/ Activer les modules attendu
- 5/ Recompiler l'init
1/ Création d'un fichier de clé random
la commande suivante créera un fichier au contenu aléatoire d'une taille de 4096 bits (mieux qu'un mot de passe de 20/30 caractères....). Vous pouvez utiliser n'importe quel fichier comme fichier clé, mais je pense qu'un fichier de 4kb avec un contenu aléatoire convient bien.
sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4
Comme vous pouvez le voir avec l'arrtibut of , le fichier sera généré dans le dossier /root avec le nom keyfile.
Avant d'utiliser la nouvelle clé, rendre le fichier clé accessible en lecture seule à root
sudo chmod 0400 /root/keyfile
Cela rendra le fichier clé lisible uniquement par root. Si quelqu'un accède à ce fichier clé, vous avez de toute façon un problème plus important sur votre serveur.
Une autre solution consiste à attribuer à root:root le droit d'accès au fichier clé souhaité et à le placer dans le dossier /root.
2/ Ajouter le fichier à LUKS
Les dispositifs LUKS/dm_crypt peuvent contenir jusqu'à 10 fichiers clés/mots de passe différents. Ainsi, en plus du mot de passe déjà configuré, nous allons ajouter ce fichier clé comme méthode d'autorisation supplémentaire.
sudo cryptsetup luksAddKey /dev/sdX /root/keyfile
Il vous sera d'abord demandé d'entrer un mot de passe (existant) pour déverrouiller le lecteur.
3/ Préparer le support USB
Tout d'abord nous allons identifier notre support USB pour le formater dans un format compatible avec un noyau linux .
Pour lister les disques nous allons utiliser la commande fdisk -l ce qui donnera :
...
Disque /dev/sdb : 29,3 GiB, 31457280000 octets, 61440000 secteurs
Disk model: PHILIPS USB
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x128faffe
Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sdb1 * 32 61439999 61439968 29,3G b W95 FAT32
...
Si le périphérique n'est pas considéré comme "Amorçage", ce n'est pas grave.
Ou avec la commande lsblk -f :
...
sdb
└─sdb1 vfat FAT32 PHILIPS UFD 1872-8C67 29,3G 0% /media/usbkey/PHILIPS UFD
...
Notre clé USB doit être au format ext4 qui est nativement compatible avec un noyau Linux contrairement au format FAT32.
Formater la clé USB
La commande pour formater la clé USB est la suivante : fidsk /dev/sdb
Cette commande permet dans l'ordre d'exécution de :
dSupprimer la partition 1nCréer une nouvelle partition de type primaire (Tout laisser par défaut)wEnregistrer et appliquer les modifications
root@server: fdisk /dev/sdb
Bienvenue dans fdisk (util-linux 2.37.2).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.
Commande (m pour l'aide) : d
Partition 1 sélectionnée
La partition 1 a été supprimée.
Commande (m pour l'aide) : n
Type de partition
p primaire (0 primary, 0 extended, 4 free)
e étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) :
Utilisation de la réponse p par défaut.
Numéro de partition (1-4, 1 par défaut) :
Premier secteur (2048-61439999, 2048 par défaut) :
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-61439999, 61439999 par défaut) :
Une nouvelle partition 1 de type « Linux » et de taille 29,3 GiB a été créée.
Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Synchronisation des disques
Maintenant que la nouvelle partition est créé on va lui mettre l'étiquette ext4, avec la commande mkfs.ext4 /dev/sdb1 ce qui donne :
mke2fs 1.46.5 (30-Dec-2021)
/dev/sdb1 contient un système de fichiers vfat étiqueté « PHILIPS UFD »
Procéder malgré tout ? (o,N) o
En train de créer un système de fichiers avec 7679996 4k blocs et 1921360 i-noeuds.
UUID de système de fichiers=6eb7057f-b73a-4586-9112-06c4fe7bb191
Superblocs de secours stockés sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocation des tables de groupe : complété
Écriture des tables d'i-noeuds : complété
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété
Voila maintenant nous avons bien notre clé USB prête à l'emploi. Pour confirmer que la clé est au bon format on peut refaire la commande lsblk -f ainsi que la commande fidisk -l :
...
sdb
└─sdb1 ext4 1.0 6eb7057f-b73a-4586-9112-06c4fe7bb191
...
Disque /dev/sdb : 29,3 GiB, 31457280000 octets, 61440000 secteurs
Disk model: PHILIPS USB
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x128faffe
Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sdb1 2048 61439999 61437952 29,3G 83 Linux
Transférer la clé de déchiffrage sur la clé usb