· 4 min de lecture · #alma-linux #linux #ssh #yubikey · dir: Linux dir: Sysadmin
Serveur distant : utilisation d’une clé YubiKey pour s’authentifier avec Sudo
Mémo pour configurer l’authentification Sudo sur un serveur distant AlmaLinux ou Debian à l’aide d’une clé YubiKey et du module PAM libpam_rssh.
Dans cet article nous allons voir comment configurer notre serveur distant pour pouvoir se connecter et s’authentifier avec une clé YubiKey sur un serveur Alma Linux. J’essaierai d’ajouter prochainement les commandes équivalentes pour Debian.
Pour ce qui est de la configuration des clés GPG et de leur stockage sur votre YubiKey, je vous renvoie vers la documentation officielle du constructeur ; elle est suffisamment éloquente pour vous permettre de réaliser cela en toute simplicité. Vous pouvez vous arrêter juste avant la partie sur la configuration de GitHub : nous avons juste besoin de la clé SSH publique pour configurer notre serveur.
https://developers.yubico.com/PGP/SSH_authentication/index.html
Note pour activer SSH avec gpg-agent sous Linux : https://medium.com/@chrispisano/ssh-authentication-with-gpg-411676781647
Nous utiliserons le plugin pour PAM intitulé libpam_rssh.so, disponible sur GitHub : https://github.com/z4yx/pam_rssh
Enfin, avant de commencer, sachez que l’utilisation de cette option est à vos risques et périls ! Ne supprimez pas les autres méthodes d’authentification, et durcissez votre politique de sécurité sur votre serveur.
Préparation
Installez les prérequis pour compiler le plugin PAM « libpam_rssh.so » :
sudo dnf install pam-devel openssl-devel cargoCréez le répertoire pour stocker les clés publiques autorisées à se connecter et à utiliser sudo (indispensable pour des raisons de sécurité : le fichier authorized_keys utilisé habituellement dans ~/.ssh ne doit pas l’être dans le cas de l’utilisation de libpam_rssh !)
sudo mkdir /etc/authorized_keysCompilation du plugin
Dans votre répertoire de travail :
git clone --recurse-submodule https://github.com/z4yx/pam_rssh.git
cd pam_rssh/
cargo build --releaseUne fois la compilation terminée, déplacez le plugin dans le bon répertoire :
sudo cp target/release/libpam_rssh.so /lib64/security/ # Sous Alma Linux 10
sudo cp target/release/libpam_rssh.so /lib/x86_64-linux-gnu/security/ # Sous Debian 13Configuration
Éditez le fichier /etc/pam.d/sudo :
sudo vim /etc/pam.d/sudoRajoutez la ligne suivante au-dessus de toutes les autres :
auth sufficient libpam_rssh.so auth_key_file=/etc/authorized_keys/${user}.keys cueOptions utilisées :
- auth_key_file : chemin vers le fichier contenant la clé publique permettant de se connecter. Pour rappel, cela permet de ne pas utiliser le fichier standard dans
~/.ssh/authorized_keyspour éviter les failles de sécurité. - cue : rappelle à l’utilisateur de toucher la YubiKey pour autoriser l’action. Vous pouvez supprimer cette option si vous n’avez pas activé l’option obligeant l’action de l’utilisateur pour lire les clés GPG !!
Votre fichier devrait ressembler à ça :

Editez le fichier sudoers :
sudo visudoAprès la litanie des Defaults env_keep += "quelquechose", ajoutez la ligne suivante :
Defaults env_keep += "SSH_AUTH_SOCK"Ce qui donne, dans mon cas :

Enfin, ajoutez la clé SSH publique que vous avez exportée au tout début (avec gpg --export-ssh-key <authentication-key-id> > ssh_auth_key.pub, cf. la documentation de Yubico) dans le fichier /etc/authorized_keys/<votre_username>.keys. Ajoutez-la également dans ~/.ssh/authorized_keys pour permettre la connexion SSH standard. Pour récapituler :
- La clé publique enregistrée dans
~/.ssh/authorized_keysvous permet de vous connecter à votre compte via ssh sans entrer de mot de passe (en somme, rien de nouveau ici sauf le fait qu’il est nécessaire d’avoir sa YubiKey pour pouvoir se connecter) - La clé publique enregistrée dans
/etc/authorized_keys/<votre_username>.keyspermet l’utilisation de sudo avec votre clé YubiKey (si tant est que vous vous êtes connecté avecssh -A)
Utilisation
L’utilisation est très simple. Connectez-vous au serveur avec l’option -A (Agent Forwarding) de ssh :
ssh -A <votre-username>@10.0.0.20Entrez votre code PIN et touchez votre clé, et voilà ! Testez un sudo dnf check-upgrade : touchez votre clé, et observez la magie opérer.
-A) que pour un serveur de confiance ; si le serveur venait à être compromis, un attaquant pourrait détourner le socket pendant la durée de la session et prendre les droits root.Sécurisation supplémentaire
Vous pouvez utiliser d’autres modules de PAM pour durcir la sécurité. Par exemple blocage du compte après x tentatives erronées, enregistrement des saisies utilisateur, logging avancé, etc.
Cela fera peut-être l’objet d’une prochaine mise à jour de cet article.