Linux : comment activer le MFA sur un accès SSH ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à configurer l'authentification multi-facteurs (MFA) sur l'accès SSH d'un serveur Linux afin de renforcer l'authentification : en complément de l'identifiant et du mot de passe, un code de vérification à usage unique devra être saisi pour s'authentifier sur le serveur.

Le MFA est compatible avec l'authentification par identifiants (utilisateur / mot de passe), mais aussi avec l'authentification par clés.

Sur le serveur Linux, nous allons devoir installer et configurer Google PAM Authenticator, correspondant au paquet "libpam-google-authenticator" (page du projet). Du côté de votre smartphone, vous pouvez utiliser l'application de génération de code de votre choix : FreeOTP, Microsoft Authenticator, Google Authenticator, etc... Il y a du choix !

Cette configuration s'applique à différentes distributions, notamment Debian, Ubuntu, Fedora, Rocky Linux, etc... Pour ma part, j'utilise une machine Debian 11 pour cette démonstration.

II. Installation et configuration de Google PAM Authenticator

Connectez-vous sur votre serveur Linux, mettez à jour le cache des paquets et installez le paquet mentionné en introduction :

sudo apt-get update
sudo apt-get install libpam-google-authenticator

SSH MFA - Installation de libpam-google-authenticator

Une fois l'installation effectuée, nous pouvons attaquer la configuration du module. Ceci va nécessiter d'utiliser votre smartphone avec votre application OTP. Exécutez cette commande :

google-authenticator

Répondez "y" à la première question pour qu'un QR code soit généré. Ce code doit être scanné avec votre application OTP, à partir de votre smartphone.

SSH MFA - QR Code de Google

Sous le QR code, il y a la question "Enter code from app" : saisissez le code affiché sur votre smartphone, et validez, afin de vérifier que cela fonctionne correctement. Notez également les codes d'urgence en lieu sûr, dans votre gestionnaire de mots de passe préféré, par exemple. Ces codes sont à utiliser uniquement si vous avez un problème avec l'application OTP sur votre smartphone.

SSH MFA - Code de secours

Ensuite, il faut répondre à 4 questions pour affiner la configuration. Pour que la configuration soit sécurisée (protection contre certaines attaques), il est nécessaire de répondre "y" donc "oui" à l'ensemble de ces questions. Par exemple, cela va imposer une limite pour les tentatives de connexion : 3 tentatives toutes les 30 secondes.

SSH MFA - Configuration de Google PAM Authenticator

La configuration de Google PAM est terminée ! Passons à la suite.

III. Activer le MFA sur la connexion SSH

Maintenant, nous devons configurer le module d'authentification de Linux et SSH pour qu'ils s'appuient sur Google PAM afin d'activer le MFA. Commencez par modifiez ce fichier :

sudo nano /etc/pam.d/sshd

Ajoutez cette ligne à la fin du fichier et enregistrez :

auth required pam_google_authenticator.so

SSH MFA - Configuration de PAM

Si vous souhaitez autoriser la connexion sans MFA, par exemple pour un utilisateur pour lequel le MFA n'est pas configuré, ajoutez  cette option :

auth required pam_google_authenticator.so nullok

Ensuite, c'est le serveur SSH en lui-même qu'il faut configurer. Ouvrez le fichier de configuration de SSH :

sudo nano /etc/ssh/sshd_config

Recherchez l'option "ChallengeResponseAuthentication" est définissez là sur "yes" à la place de "no".

ChallengeResponseAuthentication yes

Linux - Activer le MFA dans SSH

Pour utiliser le MFA avec l'authentification par clés (ce qui suit n'est pas utile pour une authentification par login et mot de passe), la configuration est un peu différente... Car, en plus de l'option que nous venons d'activer, il faut ajouter cette option :

AuthenticationMethods publickey,keyboard-interactive

Bien sûr, cela vient s'ajouter aux lignes pour désactiver l'authentification par mot de passe et pour activer la méthode basée sur une clé publique :

PubkeyAuthentication yes
PasswordAuthentication no

Fermez le fichier et redémarrez le service SSH pour appliquer les changements :

sudo systemctl restart sshd

Il est temps de tester !

IV. SSH : tester la connexion MFA

À partir d'une machine distante, initiez une connexion SSH vers votre serveur sur lequel le MFA est actif, et connectez-vous avec l'utilisateur pour lequel nous venons d'activer le MFA. Et là, surprise, une nouvelle étape nommée "Verification code" s'affiche ! C'est à ce moment-là qu'il faut ouvrir l'application de génération de code sur votre smartphone pour obtenir un code et le saisir.

Linux - Tester la connexion SSH avec le MFA

Suite à cette connexion, dans le journal "/var/log/auth.log", vous verrez une ligne comme celle-ci :

sshd(pam_google_authenticator)[1192687]: Accepted google_authenticator for flo

Dans le cas où un mauvais code est saisi, il y aura également une entrée dans les logs pour notifier cette tentative. Cet événement est intéressant et peut indiquer un signe de compromission, car il indique que quelqu'un connaît le nom d'utilisateur et le mot de passe, mais qu'il bloque sur le second facteur d'authentification.

Maintenant, c'est à vous de configurer vos serveurs !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5549.Voir tous les posts

11 thoughts on “Linux : comment activer le MFA sur un accès SSH ?

  • Bonjour,
    Super comme article 👍
    Par contre, est-ce qu’il y a un autre outil que celui de Google pour réaliser le MFA sur le serveur ?

    Répondre
    • Hello Axl,
      Personnellement je connais uniquement cet outil proposé par Google pour réaliser le MFA. Je pense qu’il doit exister des alternatives… Je suis preneur d’un retour si tu fais quelques recherches 🙂

      Répondre
      • Et si tu scannes le QRcode avec Aegis, cela devrait fonctionner. Teste-le si tu as l’occasion 😉

        Répondre
    • Microsoft à le sien au besoin qui fonctionne exactement pareil  » Microsoft authenticator » mais je préfère Google car Google n’a aucun lien avec mes accès protégés, c’est comme utiliser MS Auth app pour une session windows j’éviterai …

      Répondre
  • J’avais fait la même chose sous debian avec oathtool libpam-oath qrencode zbar-tools

    Répondre
  • J’avoue qu’avoir recours à du code Google pour ce type de chose est plutôt repoussant…

    Répondre
  • Ce qui m’intéresserai c’est utiliser une clé de sécurité fido u2f ou une carte à puce fido en lieu et place du mfa …

    Répondre
    • Cela devrait être possible avec un agent ssh sur votre poste client, à mon avis. Par contre, ce ne serait pas forcément simple de sauter de ssh en ssh.

      Répondre
  • Bonjour,
    Très bien cet article mais du coup on est obligé d’entrer son mot passe, la clé privée n’est plus utilisée ?

    J’aimerais forcer l’authentification par clé privée et y ajouter le MFA sans pour autant obliger l’utilisation du mot de passe. Ce n’est pas possible ?

    Répondre
  • @ Cornely : Tu as dû rater cette étape du tuto :

    Pour utiliser le MFA avec l’authentification par clés (ce qui suit n’est pas utile pour une authentification par login et mot de passe), la configuration est un peu différente… Car, en plus de l’option que nous venons d’activer, il faut ajouter cette option :

    AuthenticationMethods publickey,keyboard-interactive

    Bien sûr, cela vient s’ajouter aux lignes pour désactiver l’authentification par mot de passe et pour activer la méthode basée sur une clé publique :

    PubkeyAuthentication yes
    PasswordAuthentication no

    Répondre
  • Bonjour
    il faut mettre à jour votre tuto pour préciser deux choses :
    – à partir de Debian 12, dans sshd_config c’est l’option « KbdInteractiveAuthentication » qu’il faut définir sur « yes » (à la place de « ChallengeResponseAuthentication » qui n’apparaît plus)
    – quand on utilise l’authentification par clé, il faut commenter dans le fichier /etc/pam.d/sshd l’option « @include common-auth » du paragraphe « # Standard Un*x authentication. » Sans quoi le mot de passe est demandé.

    Répondre

Répondre à Axl Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.