C’est un peu la suite de l’article Linux et Yubikey, faire fonctionner ensemble authentification par clefs pour certains comptes, mot de passe et Yubikey pour d’autres.

Avant de faire quoi ce soit de cet article ouvrez deux terminaux sur la machine: un pour travailler et un autre au cas où vous vous enfermiez dehors. Je n’explique pas comment mettre en place l’authentification par clef, les Internets foisonnent d’articles sur le sujet.

L’idée c’est de n’autoriser que l’authentification par clef pour tous les comptes présents sur la machine sauf certains qui utilisent en plus du mot de passe une Yubikey (pour la mise en place voir Linux et Yubikey). L’aspect « compliqué » de la chose est qu’il faut jouer avec PAM.

Configuration SSH

Voici les directives qui doivent apparaître dans votre fichier /etc/ssh/sshd_config

...
PubkeyAuthentication yes
...
ChallengeResponseAuthentication yes
KbdInteractiveAuthentication no
...
PasswordAuthentication no
...
UsePAM yes

Première étape expliquer à SSH pour certains logins il faut autoriser l’utilisation de mot de passe et la saisie au clavier. A la fin de votre fichier de configuration /etc/ssh/sshd_config:

...
Match User yubikeyuser
  KbdInteractiveAuthentication yes
  PasswordAuthentication yes

Voila pour la configuration SSH

PAM

Dans le fichier /etc/pam/sshd il faut maintenant lister les utilisateurs qui peuvent s’authentifier par mot de passe. Tous les autres essuierons un refus d’authentification (par mot de passe).

Dans un premier temps il faut créer un fichier /etc/ssh.login.allowed qui contient la liste des utilisateurs qui peuvent s’authentifier par mot de passe. Il faut mettre un login par ligne.

Ensuite dans le fichier /etc/pam/sshd, au début:

auth required pam_listfile.so onerr=fail item=user sense=allow file=/etc/ssh.login.allowed
  • onerr=fail que faire en cas d’erreur: le fichier n’existe pas, …
  • item=user la vérification se fait au niveau utilisateur. Il est possible de le faire au niveau groupe.
  • sense=allow si le login est trouvé dans le fichier il est autorisé. Il est possible de mettre deny pour interdire l’accès
  • file=/etc/ssh.login.allowed fichier contenant les logins

Et voila, il faut redémarrer SSH et c’est bon (enfin normalement 😉 )