… Ou comment sentir poindre sur vous le regard réprobateur de vos amis lors d’une soirée, alors qu’en toute candeur vous abordiez ce fascinant sujet avec un confrère émérite, le « Vos discussions d’admins, ça commence à… » ne tardant jamais à suivre. Le fait est qu’en société, le profane ne goûte guère à vos échanges académiques en la matière. Encore que périodiquement, ils souhaitent connaître votre position sur le « NTLDR is missing, Operating System not found », un sujet qui curieusement semble les intéresser grandement.

Pré-requis :

  • GNU/Linux Debian 6 « Squeeze » dont les partitions sont chiffrées avec LUKS
  • SSH installé

Conventions :

  • prompt : # commande : exécuter la commande sous le compte root ou précédée de la commande « sudo »
  • prompt : $ commande : exécuter la commande sous le compte utilisateur

Cet épineux problème, le montage partition chiffrée pas le NTLDR, survient quand on souhaite chiffrer son serveur GNU/Linux et pouvoir le redémarrer à distance via SSH. En effet, le mot de passe/clé privée est demandé avant le lancement du service SSH, un cas de Jörmungand informatique classique.

Après moultes recherches sur le sujet et divers essais infructueux, je suis tombé sur ce post de l’auteur du tutoriel pour Debian qui indiquait que cette problématique était prise en charge nativement par Debian depuis fin 2008.

On commence par installer Dropbear (un serveur/client SSH) et Busybox (un mini shell avec les commandes basiques). Initrd sera mis à jour lors de l’installation pour inclure ces logiciels.

# apt-get install dropbear busybox

Lors de l’installation de Dropbear, les clés publique /etc/initramfs-tools/root/.ssh/id_rsa.pub et privées /etc/initramfs-tools/root/.ssh/id_rsa sont générées. De plus, la clé publique est automatiquement ajoutée au fichier /etc/initramfs-tools/root/.ssh/authorized_keys.

On va donc récupérer la clé privée sur notre PC local afin l’utiliser pour l’authentification sur le serveur lors du démarrage de ce dernier :

# scp root@myserver:/etc/initramfs-tools/root/.ssh/id_rsa /home/user/

Il ne reste plus qu’à redémarrer le serveur Debian et lancer la commande suivante qui outre l’authentification SSH va déchiffrer le volume LUKS et par la suite monter la partition  :

# ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" -i "/home/user/id_rsa" root@myserver "echo -ne \"myLUKSpassword\" >/lib/cryptsetup/passfifo"

-o « UserKnownHostsFile=~/.ssh/known_hosts.initramfs » : utilise un autre fichier « known_hosts » car la clé publique du serveur SSH « classique » n’est pas identique à celle du serveur Dropbear, sans cette option, le client SSH interpréterait cette nouvelle clé comme une compromission du serveur et refuserait de s’y connecter.

-i « /home/user/id_rsa » : on utilise la clé privée générée lors de l’installation de Dropbear et qu’on a récupérer précédemment.

« echo -ne \ »myLUKSpassword\ » >/lib/cryptsetup/passfifo » : le mot de passe est envoyé dans fichier FIFO /lib/cryptsetup/passfifo ce qui permet le déchiffrage du volume.

Plusieurs remarques pour finir :

  • Si votre mot de passe LUKS contient des caractères exotiques qui peuvent être interprétés par bash pendant l’exécution de la commande SSH, il faut les précéder de \ ou  »  » ou ‘ ‘ afin de les « échapper ».  Le ! par exemple (Se transforme en PID de la commande (asynchrone) exécutée en arrière-plan le plus récemment dixit man bash) nécessite de désactiver l’interprétation de l’historique par la commande set +H avant d’entrer la commande SSH, set -H réactivera l’interprétation de l’historique.
  • Ce tutoriel n’a été validé que sur Debian 6, dans le principe il devrait fonctionner sur d’autres distributions. J’ai cependant vu plusieurs sujets indiquant des problèmes avec Ubuntu à cause notamment de l’utilisation de Plymouth.
  • Je n’ai pas vu de solution utilisant le mot de passe root afin de se connecter au serveur SSH Dropbear mais ça existe peut-être…

Sources :