Je cherche un moyen non interactif de déchiffrer une partition de fichier racine et une partition de swap chiffrée avec LUKS lors du prochain redémarrage du système. En plus de cela, j'ai besoin d'un moyen de l'annuler après le redémarrage pour qu'il répète après le redémarrage, le mot de passe (ou même un nouveau mot de passe).
Le système utilise LVM.
Je ne veux pas avoir à taper le mot de passe sur le système, ou utiliser un autre système pour le déverrouiller, il doit se déverrouiller lui-même une fois.
J'ai le mot de passe avec lequel il est crypté et je serais prêt à le sauvegarder en texte clair sur le disque dur. Je ne suis pas concerné par la sécurité à cette étape.
J'ai un flux de déploiement d'Ubuntu basé sur une installation de serveur Ubuntu avec un fichier preseed et kickstart personnalisé. Kickstart installe un service exécuté après le premier redémarrage (et uniquement le premier redémarrage), puis redémarre à nouveau. J'essaie d'implémenter le chiffrement de disque LUKS dans ce flux, mais j'ai besoin qu'il reste non interactif, de sorte qu'il doit pouvoir redémarrer la première fois sans mot de passe.
Le mot de passe défini lors de l'installation est temporaire et sera modifié par le service qui s'exécute après le premier redémarrage. Le premier mot de passe peut donc être stocké en texte clair.
J'ai fait assez mon travail de recherche sur Google pour essayer de résoudre celui-ci, et la plupart de ce que je trouve vont vers une solution qui permute le fichier initramfs.
J'ai trouvé plusieurs ressources expliquant comment utiliser ceci pour permettre le déverrouillage à distance du système, mais je dois le faire sans interaction. Voici une de ces ressources: https://hamy.io/post/0005/remote-unlocking-of-luks-encrypted-root-in-ubuntu-debian/
La solution la plus proche de la solution que je pense avoir trouvée est cette ressource qui est supposée être un moyen d'accomplir ce que je veux pour une solution VPS, mais il ne s'agit que d'un ensemble de commandes sans explication, et je ne sais pas comment adaptez-le: https://dradisframework.com/pro/support/guides/customization/auto-unlock-luks-encrypted-drive.html
J'ai aussi trouvé cette ressource pour ArchLinux https://wiki.archlinux.org/index.php/Dm-crypt/System_configuration#cryptkey , et j'ai essayé d'ajouter les paramètres du noyau, mais je n'ai pas encore pas de chance avec ça non plus. Je ne sais pas si c'est parce que LUKS ne prend pas en charge ces paramètres de noyau.
La solution semble être assez simple, et est en quelque sorte décrite dans Comment configurer LVM & LUKS pour déchiffrer automatiquement la partition?
Ma partition/boot est/dev/sda1
Mon volume LVM que je veux déchiffrer est/dev/sda3
J'étais root, mais si vous n'avez pas ajouté Sudo à toutes les commandes.
Commencez par créer un fichier de clés avec un mot de passe (j'en génère un pseudo-aléatoire)
dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4
Puis définissez l'autorisation de lecture pour root et rien pour personne d'autre
chmod 0400 /boot/keyfile
Ajoutez ensuite le fichier de clé en tant que clé de déverrouillage
cryptsetup -v luksAddKey /dev/sda3 /boot/keyfile
(Vous serez ensuite invité à saisir le mot de passe de cryptage)
Trouvez l'uuid de la partition/boot avec (celle-ci ne vous oblige pas à être root)
ls -l /dev/disk/by-uuid/
Voici un exemple de ce à quoi l’apparence ressemble (ce n’est pas la sortie réelle car je l’ai saisie à partir d’une autre machine)
test@test:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 15 03:36 025c66a2-c683-42c5-b17c-322c2188fe3f -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 15 03:36 9e7a7336-3b81-4bbe-9f1a-d43415df1ccb -> ../../sda1
Puis éditez/etc/crypttab avec votre éditeur préféré
nano /etc/crypttab
Le contenu ressemblera à quelque chose comme (encore une fois, cela provient d'une autre machine)
sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f none luks,discard
Ce que vous voulez faire, c'est que vous voulez remplacer aucun par /dev/disk/by-uuid/[ l'uuid de la partition/boot] et que vous souhaitez remplacer annulez par ) keyscript =/lib/cryptsetup/scripts/passdev
Le résultat devrait ressembler à quelque chose comme ça
sda3_crypt UUID=025c66a2-c683-42c5-b17c-322c2188fe3f /dev/disk/by-uuid/9e7a7336-3b81-4bbe-9f1a-d43415df1ccb luks,keyscript=/lib/cryptsetup/scripts/passdev
Enregistrez le fichier et continuez avec la mise à jour de initramfs
update-initramfs -u
Ça y est, vous pouvez maintenant redémarrer.
reboot
Pour le supprimer à nouveau (comme je le voulais)
Je confirme d'abord qu'il n'y a que deux clés dans le système (la clé d'origine et le nouveau fichier de clés)
cryptsetup luksDump /dev/sda3 | grep BLED
Cela générera une sortie similaire à celle-ci.
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Pour supprimer la clé dans le logement de clé 1 (le fichier de clé)
cryptsetup luksKillSlot /dev/sda3 1
Vous êtes ensuite invité à saisir le mot de passe de cryptage (le mot de passe d'origine, pas celui du fichier de clés).
Puis supprimez le fichier de clé actuel
rm /boot/keyfile
Mettre à jour les initramfs à nouveau
update-initramfs -u
Maintenant, lorsque vous redémarrez, il vous sera demandé à nouveau un mot de passe. Vous avez terminé.
reboot