Authentification forte (2FA) Yubikey SSH

13 septembre 2016 Sécurité 3 Commentaires

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