web-dev-qa-db-fra.com

Chiffrement complet du système avec LUKS sur un serveur sans tête - déverrouillez avec dropbear et busybox. Comment?

J'ai chiffré un serveur sans tête avec cryptsetup/LUKS.
2 disques durs avec 512 Mo/démarrage sur/dev/md0 et 1,61 TB LUKS chiffrés/dev/md1 avec LVM contenant /, swap et autres.
J'ai installé Dropbear (et busybox était déjà installé) pour tout déverrouiller pendant le processus de démarrage. J'utilise GRUB2.

Jusqu'ici tout fonctionne bien. Je peux me connecter avec une clé privée sur Dropbear en écoutant sur le port 22 et déverrouiller LUKS avec la commande

echo -n "passphrase" > /lib/cryptsetup/passfifo

dès que je fais cela, le serveur démarre comme si rien n'était crypté. C'est exactement ce que je veux.

Bien que cela fonctionne bien, ce n'est pas comme je le veux.
Tout d’abord, je ne trouve aucune documentation sur/lib/cryptsetup/passfifo. Comment ça marche même? Deuxièmement, j'ai généré un fichier de clés avec GPG (également avec cryptsetup comme périphérique de bouclage) que je souhaite utiliser à la place d'un mot de passe. Mais je ne trouve aucun documentaire sur la façon de faire cela dans busybox. GPG ne semble pas être installé, je ne peux donc pas utiliser cette clé (puis-je en quelque sorte rendre GPG disponible pour busybox?)

Pour le moment, le seul moyen de déverrouiller mon système est de transmettre mon mot de passe à/lib/cryptsetup/passfifo, ce que je ne souhaite pas utiliser. J'ai essayé d'utiliser cryptsetup directement dans son chemin busybox comme

cryptsetup luksOpen /dev/md1 cryptdisk

Je n'ai pas montré d'erreur, mais mon système n'a pas procédé au démarrage.

Avez-vous des idées sur ce que je pourrais faire ou y a-t-il un problème avec mon approche?

Franc

2
FrankM

Ceci est plus un commentaire qu'une réponse, désolé. Mais comme vous n'avez pas encore reçu de réponse, je voulais quand même écrire quelque chose.

Comment ça marche même:

Dans Initramfs, vous avez généralement un processus maître (généralement un script shell _/init_ basé sur busybox), chargé de rendre la partition racine disponible avant de transférer le processus de démarrage au système init réel de votre installation Ubuntu.

Dans le cas de dropbear dans Initramfs, il s'agit d'un processus séparé démarré par _/init_. En vous connectant à dropbear, vous obtenez un shell qui est encore un autre processus. Pendant tout ce temps, l'original _/init_ doit être en cours d'exécution et attendre quelque chose, dans ce cas le mot de passe LUKS.

Donc, ce que le script _/init_ fait le plus probablement ici, une fois qu'il a démarré dropbear, est de créer un canal nommé, ou fifo, c’est-à-dire le _/lib/cryptsetup/passfifo_. Et puis il lit à partir de ce tuyau nommé. Cette lecture bloquera jusqu'à ce qu'il y ait réellement quelque chose à lire. C'est ainsi que _/init_ se bloque et attend l'entrée.

Quelques années plus tard, vous vous connectez à dropbear et effectuez votre _echo passphrase > /lib/cryptsetup/passfifo_, auquel moment _/init_ se réveille et reprend pour déverrouiller LUKS et poursuivre le processus de démarrage.

Et c'est fondamentalement l'idée générale de la façon dont cela fonctionne. S'il n'y a pas de documentation pour cela, vous devrez lire le script Shell.

En ce qui concerne une clé cryptée GPG dans Initramfs, je suis sûr que c’est la méthode standard sous Ubuntu, qui doit probablement être configurée via _/etc/crypttab_. Avez-vous consulté le wiki pour un howto?

Il faudrait certainement que GPG soit inclus dans les Initramfs. mais j’ai présenté ici une approche alternative qui pourrait fonctionner sans dépendance supplémentaire:

Comment utiliser dm-crypt (LUKS) avec GnuPG pour utiliser deux facteurs pour FDE?

Le problème, c’est bien sûr que ce n’est pas standard et qu’il pourrait donc être plus simple en théorie, mais qu’il pourrait être plus difficile à installer.

1
frostschutz