aurelien@aschnoebelen.fr:~/blog $

aurelien@aschnoebelen.fr: ~ $ cat ./articles/serveur-distant-utilisation-dune-cle-yubikey-pour-sauthentifier-avec-sudo/

· 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 » :

Terminal bash
sudo dnf install pam-devel openssl-devel cargo

Cré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 !)

Terminal bash
sudo mkdir /etc/authorized_keys

Compilation du plugin

Dans votre répertoire de travail :

Terminal bash
git clone --recurse-submodule https://github.com/z4yx/pam_rssh.git
cd pam_rssh/
cargo build --release

Une fois la compilation terminée, déplacez le plugin dans le bon répertoire :

Terminal bash
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 13

Configuration

Éditez le fichier /etc/pam.d/sudo :

Terminal bash
sudo vim /etc/pam.d/sudo

Rajoutez la ligne suivante au-dessus de toutes les autres :

/etc/pam.d/sudo text
auth       sufficient   libpam_rssh.so    auth_key_file=/etc/authorized_keys/${user}.keys cue

Options 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_keys pour é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 :

Aperçu de /etc/pam.d/sudo

Editez le fichier sudoers :

Terminal bash
sudo visudo

Après la litanie des Defaults env_keep += "quelquechose", ajoutez la ligne suivante :

/etc/sudoers text
Defaults    env_keep += "SSH_AUTH_SOCK"

Ce qui donne, dans mon cas :

Aperçu du fichier sudoers

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_keys vous 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>.keys permet l’utilisation de sudo avec votre clé YubiKey (si tant est que vous vous êtes connecté avec ssh -A)

Utilisation

L’utilisation est très simple. Connectez-vous au serveur avec l’option -A (Agent Forwarding) de ssh :

Terminal bash
ssh -A <votre-username>@10.0.0.20

Entrez votre code PIN et touchez votre clé, et voilà ! Testez un sudo dnf check-upgrade : touchez votre clé, et observez la magie opérer.

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.