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
Alors là SSH devient vraiment sécurisé avec ça, je ne pensais pas cela possible ! Il serait temps que je pense à acquérir cette fameuse Yubikey 😀
Par contre une question (qui concerne le fichier authorized_keys, mais qui peut se rapporter à authorized_yubikeys aussi), personnellement j’ai crée un seul fichier stocké dans /etc/shh qui contient toutes les clés autorisées. Je sais que de base ce fichier est stocké dans /home/xxx/.ssh, du coup est-il plus sécurisant de le laisser à son emplacement par défaut ou ça ne change rien ?
Ça marche parfaitement, j’ai une Yubikey depuis 2 ans maintenant et c’est génial.
Lorsque tu mets les clés SSH dans /home/xxx/.ssh elles ne fonctionnent qu’avec l’utilisateur xxx
J’ai publié la mauvaise version de l’article je viens de le corriger.
Désolé
sa ne marche pas pour moi sa marche pas accée denied
sa marche falait juste que je face sa jai pompé sa sur un autre tuto
sudo groupadd yubikey
sudo usermod -aG yubikey yubiuser
sinon s amarcher pas
et en plus le truc cool se que se qui son pas dans le group bha peuvent sautentifier normalement
Je ne me rappelle pas avoir eu besoin de faire cette manip.
Il faudrait que je le reteste
salut dit jai un probleme sa a bug et maintenant tous le monde a besoin d’une yubikey pour s’authentifier hors ton truc la
Match User ishower
AuthenticationMethods publickey
ne marche pas sa plante le service ssh a et je voudrez que autentification par passworld pour certain utilisateur car la c’est parti en vrille
merci d’avance de ton aide