Déverrouillage luks via SSH

Lors de l’installation d’un nouveau système il est courant d’avoir une hésitation entre sécurité et simplicité.

C’est vrai que ce n’est pas très pratique de devoir être devant un serveur lors d’un redémarrage ainsi que les cas où le mappage du clavier reste en anglais US.

Pour cette raison voici un tutoriel pour réaliser cette action en réseau via SSH.

Prérequis

  • Ubuntu (testé sur ubuntu 20.04)

  • Partition chiffrée

  • Adresse IP fixe (ou équivalent)

  • Pair de clés SSH

Mise à jour du système

Dans un premier temps il faut que le système soit à jour.

# apt update
# apt upgrade -y

Installation de dropbear pour initramfs

Dans cette partie nous allons installer une version spécifique du serveur SSH Dropbear avec des fonctionnalités lui permettant de fonctionner dans un environnement initramfs qui est utilisé pendant le démarrage.

# apt install dropbear-initramfs

À l’installation l’erreur suivante peut s’afficher :

dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won’t work!

Cette erreur sera réglée par la suite.

Configuration de dropbear

Le fichier de configuration spécifique au paquet dropbear-initramfs est le suivant : /etc/dropbear-initramfs/config.

Changement du port par défaut

Comme l’environnment initramfs ne permet pas l’usage d’un pare-feu il est recommandé de changer le port utilisé par le serveur dropbear.

Par exemple utiliser le port 9210 il faut ajouter la ligne suivante au fichier de configuration :

/etc/dropbear-initramfs/config
DROPBEAR_OPTIONS="-p 9210"

Méthode alternative

Pendant les recherches j’ai vu que certaines personne avait eu des problèmes avec cette configuration. Il semblerait que dans certains cas, mettre la ligne DROPBEAR_OPTION dans le fichier /etc/initramfs-tools/initramfs.conf permettrait de régler le problème.

Ajustement

Pour voir les options toutes disponibles utilisez la commande man dropbear.

Personnellement j’ai choisi d’ajouter les options :

  • -s : Désactive la connexion par mot de passe

  • -j : Désactivation du forwarding de port local

  • -k : Désactivation du forwarding de port distant

  • -I 60 : Temps avant la coupure de la connexion lorsqu’il n’y a pas de transmission de traffic

Résultat nous avons la configuration suivante :

/etc/dropbear-initramfs/config
DROPBEAR_OPTIONS="-p 9210 -s -j -k -I 60"

Authentification SSH

Maintenant comme nous avons désactivé la connexion par mot de passe il faut ajouter votre clé publique aux clés ssh autorisées.

Cette clé doit être ajoutée dans le fichier /etc/dropbear-initramfs/authorized_keys, une clé par ligne.

Si vous voulez réduire les privilèges liés à une clé pour n’autorisé que l’action de déchiffrement vous pouvez ajouter les instructions suivantes au début de la ligne: no-port-forwarding,no-agent-forwarding,no-x11-forwarding,command="/bin/cryptroot-unlock".

Pour rappel, dans le cas d’une clé RSA le vôtre est probablement dans le fichier ~/.ssh/id_rsa.pub sur votre machine et non le serveur. Si vous avez besoin d’en générer une la commande ssh-keygen de votre station de travail a cette fonction.

Après avoir modifié la configuration de dropbear, il ne faut pas oublier de reconstruire l’envirronement initramfs: update-initramfs -u.

Paramètres IP du Kernel

Afin d’avoir une IP fixe lors du démarrage il faut définir les paramètres IP au niveau du kernel.

Définition d’une IP statique

Il est possible de définir une IP statique au démarrage en modifiant le paramètre GRUB_CMDLINE_LINUX_DEFAULT du fichier /etc/default/grub.
Pour se faire il faut ajouter l’instruction suivante : ip=<ip>::<ip-passerelle>:<masque>.

Voici un exemple :

GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity ip=192.168.1.2::192.168.1.1:255.255.255.0"

Ensuite il ne faut pas oublier de mettre à jour la configuration de grub :

# update-grub

Méthode alternative

Pour cette étape aussi j’ai pu observer que pour certaines personnes cette méthode ne fonctionne pas correctement, si vous êtes dans cette situation vous pouvez essayer ce qui suit.

À la place de modifier le fichier /etc/default/grub, il est possible d’ajouter la ligne : IP="<ip>::<ip-passerelle>:<masque>::eth0:off" au fichier /etc/initramfs-tools/initramfs.conf.

Le mot clé IP est en majuscule.

Et ensuite il ne faut pas oublier de reconstruire initramfs avec la commande update-initramfs -u.

Connexion

Maintenant faisons un essai en redémarrant la machine :

# reboot

Ensuite connectons-nous à la machine :

$ ssh -p 9210 root@192.168.127.146

Enfin il ne reste plus que le déverrouillage de la partition :

# cryptroot-unlock
Please unlock disk dm_crypt-0:

Une fois la connexion automatiquement coupée, la partition est ouverte, le système termine son démarrage et il est maintenant possible de se connecter.