Comme je l’ai déjà répété à de nombreuses reprises l’authentification forte (2FA) c’est la vie et je vous recommande fortement de la mettre en place dès lors que cette option vous est proposée. Nous allons donc aujourd’hui voir comment mettre en place une authentification double facteur avec une Yubikey sur un serveur SSH.
Authentification forte (2FA) Yubikey SSH : Vous avez dit Yubikey ?
Une Yubikey est un dispositif d’authentification USB vous permettant d’utiliser différentes méthodes d’authentification : FIDO U2F, Yubico-OTP, OATH-OTP, OATH-HOTP, OATH-TOTP, OpenPGP, et PIV. Lorsqu’elle est connectée à votre ordinateur la Yubikey simule un clavier USB. Deux méthodes d’authentification sont paramétrables via ses deux slots de configuration, elle pourra réagir à une stimulation physique (pression du bouton) ou automatiquement (via des logiciels). Si vous souhaitez en savoir plus sur le fonctionnement des Yubikeys je vous conseille cet article rédigé par Aeris et le wiki de Maxime de Roucy.
Authentification forte (2FA) Yubikey SSH : Clé API
Avant de pouvoir commencer nous allons devoir récupérer une clé d’API Yubico. Ouvrez cette page, renseignez votre email, générez un code OTP en appuyant sur le bouton de votre Yubikey et validez.
Sauvegardez les identifiants qui s’affichent.
Authentification forte (2FA) Yubikey SSH : Installation et configuration
Commençons par nous connecter à notre serveur puis récupérons la librairie requise en lançant la commande
sudo apt-get install libpam-yubico
Maintenant ouvrez le fichier /etc/pam.d/sshd
sudo nano /etc/pam.d/sshd
Recherchez @include common-auth
puis juste en-dessous ajoutez
auth required pam_yubico.so id=mon-id key=ma-cle url=https://api.yubico.com/wsapi/2.0/verify?id=%d&otp=%s
Authentification forte (2FA) Yubikey SSH : Lien Yubikey / Utilisateur
Maintenant que tout est en place nous allons devoir faire le lien entre chaque Yubikey et chaque utilisateur. Ce lien fonctionne sous le même modèle que pour les clés SSH cependant les informations doivent etre stockées dans ~/.yubico/authorized_yubikeys
au format suivant utilisateur:yubikeyid1:yubikeyid2
.
Pour récupérer votre yubikeyid lancez la commande suivante, puis appuyez sur le bouton de votre Yubikey
read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s:0:12}
Exemple :
root@noobunbox:~# read -p "Enter a YubiKey OTP: " s && echo 'The key id is' ${s :0:12} Enter a YubiKey OTP: vvukdhrutoplhftvrucnhgnvjnjjkfbeeeibbhejckie The key id is vvukdhrutopl
Maintenant créons le fichier nécessaire, ici pour l’utilisateur root
mkdir ~/.yubico nano ~/.yubico/authorized_yubikeys
Nous pouvons maintenant faire le lien entre notre utilisateur, root, et notre yubikeyid, vvukdhrutopl, en insérant dans ce fichier
root:vvukdhrutopl
Relancez la configuration du serveur SSH
sudo service sshd reload
Une fois les modifications effectuées ne fermez pas votre connexion SSH, ouvrez en une seconde et vérifiez que tout fonctionne.
Authentification forte (2FA) Yubikey SSH : Gestion authentification par utilisateur
Maintenant quelques problèmes peuvent se poser :
- Que faisons-nous si nous avons avez d’autres users SSH se connectant au serveur n’ayant pas ou ne pouvant pas utiliser de Yubikey (rsync par exemple) ?
- Je suis un fou, je veux m’authentifier avec mot de passe + yubikey + clé SSH, je fais comment ?
Hé bien c’est assez simple puisqu’il suffit de modifier la configuration du serveur SSH.
sudo nano /etc/ssh/sshd_config
Pour un utilisateur scripts nous souhaitons utiliser seulement une authentification par clé, il nous suffira d’ajouter les lignes de configuration suivante
Match User scripts AuthenticationMethods publickey
Pour l’utilisateur root nous souhaitons utiliser une authentification mot de passe + yubikey et par clé
Match User root AuthenticationMethods publickey,keyboard-interactive
Authentification forte (2FA) Yubikey SSH : Démo
Ci-dessous une petite démo d’une authentification sur un serveur avec publickey + mot de passe / yubikey
Sources