Ce didacticiel vous montrera comment configurer l'authentification à deux facteurs SSH sur le serveur Ubuntu à l'aide du célèbre Google Authenticator. Cela améliorera considérablement la sécurité du service SSH sur votre serveur Ubuntu.
Fonctionnement de l'authentification à deux facteurs
Normalement, il vous suffit d'entrer un mot de passe ou d'utiliser la clé SSH pour vous connecter à distance à votre serveur Ubuntu. L'authentification à deux facteurs (2FA) nécessite que vous saisissiez deux informations pour vous connecter. Vous devrez donc également saisir un mot de passe à usage unique basé sur le temps pour vous connecter à votre serveur SSH. Ce mot de passe à usage unique est calculé à l'aide de l'algorithme TOTP, qui est une norme IETF. De nos jours, de nombreux sites Web et services (Facebook, Google, Twitter, etc.) proposent 2FA aux utilisateurs pour sécuriser leurs comptes et c'est une bonne idée d'activer également 2FA sur votre serveur SSH.
Ce tutoriel vous montrera comment configurer
- Authentification par mot de passe avec 2FA
- Authentification par clé publique avec 2FA
Remarque :Le logiciel serveur open-source que nous utiliserons dans cet article s'appelle libpam-google-authenticator
, qui est installé à partir du référentiel Ubuntu par défaut. La société Google n'intervient sous aucune forme dans le processus d'authentification. Le logiciel serveur et l'application mobile n'ont pas besoin d'un accès au réseau.
Étape 1 :Installer et configurer Google Authenticator sur le serveur Ubuntu
Connectez-vous à votre serveur Ubuntu et exécutez la commande suivante pour installer Google Authenticator à partir du référentiel de packages Ubuntu par défaut.
sudo apt install -y libpam-google-authenticator
Exécutez ensuite le google-authenticator
commande pour créer une nouvelle clé secrète dans votre répertoire personnel.
google-authenticator
À la question "Voulez-vous que les jetons d'authentification soient basés sur le temps ?" Répondez y .
Ensuite, vous verrez un code QR que vous pourrez scanner à l'aide d'une application TOTP sur votre téléphone. Il y a deux applications que je recommande :
- Google Authenticator est l'application mobile TOTP la plus connue. Vous pouvez l'installer via Google Play ou l'App Store d'Apple sur votre téléphone portable.
- L'Google Authenticator l'application mobile n'est pas open-source. Si vous ne faites pas confiance à Google, vous pouvez utiliser FreeOTP, une application mobile TOTP open source développée par Red Hat.
Scannez le code QR avec Google Authenticator ou FreeOTP sur votre téléphone portable. Notez que vous devez agrandir la fenêtre du terminal pour scanner le code QR complet.
Le code QR représente la clé secrète, qui n'est connue que de votre serveur SSH et de votre application mobile TOTP. Une fois le code QR scanné, vous pouvez voir un mot de passe à usage unique à six chiffres sur votre téléphone. Par défaut, il change toutes les 30 secondes. Vous devrez saisir ce mot de passe à usage unique ultérieurement pour vous connecter au serveur Ubuntu via SSH.
Dans la fenêtre du terminal, vous pouvez voir la clé secrète, le code de vérification et le code à gratter d'urgence. Il est recommandé de sauvegarder ces informations dans un endroit sûr pour une utilisation ultérieure.
Ensuite, vous pouvez saisir y pour répondre à toutes les questions restantes. Cela mettra à jour votre fichier de configuration Google Authenticator, désactivera les utilisations multiples du même jeton d'authentification, augmentera la fenêtre de temps et activera la limitation du débit pour vous protéger contre les tentatives de connexion par force brute.
Étape 2 : Configurer le démon SSH pour utiliser Google Authenticator
- Authentification par mot de passe avec 2FA
- Authentification par clé publique avec 2FA
Authentification par mot de passe avec 2FA
Si vous n'utilisez pas de clé SSH, suivez les instructions ci-dessous.
Ouvrez le fichier de configuration du serveur SSH.
sudo nano /etc/ssh/sshd_config
Recherchez les deux paramètres suivants dans le fichier et assurez-vous qu'ils sont tous les deux définis sur oui .
UsePAM yes ChallengeResponseAuthentication yes
PAM signifie module d'authentification enfichable. Il fournit un moyen simple de connecter différentes méthodes d'authentification à votre système Linux. Pour activer Google Authenticator avec SSH, l'authentification PAM et Challenge-Response doivent être activées.
Si vous souhaitez autoriser l'utilisateur root à utiliser 2FA, recherchez le PermitRootLogin
paramètre et définissez sa valeur sur yes
. Il ne peut pas s'agir de PermitRootLogin no
ou PermitRootLogin prohibit-password
.
PermitRootLogin yes
Enregistrez et fermez le fichier. Ensuite, modifiez le fichier de règles PAM pour le démon SSH.
sudo nano /etc/pam.d/sshd
Au début de ce fichier, vous pouvez voir la ligne suivante, qui active l'authentification par mot de passe lorsque ChallengeResponseAuthentication
est défini sur yes
.
@include common-auth
Pour activer 2FA dans SSH, ajoutez les deux lignes suivantes.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Enregistrez et fermez le fichier. Redémarrez ensuite le démon SSH pour que la modification prenne effet.
sudo systemctl restart ssh
À partir de maintenant, le démon SSH vous demandera de saisir un mot de passe utilisateur et un code de vérification (le mot de passe à usage unique généré par Google Authenticator). La capture d'écran suivante montre une session de connexion SSH depuis une boîte CentOS vers un serveur Ubuntu 20.04.
Authentification par clé publique avec 2FA
Si vous utilisez la clé SSH pour vous connecter au serveur SSH, suivez les instructions ci-dessous.
Ouvrez le fichier de configuration du serveur SSH.
sudo nano /etc/ssh/sshd_config
Recherchez les deux paramètres suivants dans le fichier et assurez-vous qu'ils sont tous les deux définis sur oui .
UsePAM yes ChallengeResponseAuthentication yes
PAM signifie module d'authentification enfichable. Il fournit un moyen simple de connecter différentes méthodes d'authentification à votre système Linux. Pour activer Google Authenticator avec SSH, l'authentification PAM et Challenge-Response doivent être activées.
Si vous souhaitez autoriser l'utilisateur root à utiliser 2FA, recherchez le PermitRootLogin
paramètre et définissez sa valeur sur yes
. Il ne peut pas s'agir de PermitRootLogin no
ou PermitRootLogin prohibit-password
.
PermitRootLogin yes
Ensuite, ajoutez la ligne suivante à la fin de ce fichier. Cela indique au démon SSH que l'utilisateur doit réussir à la fois l'authentification par clé publique et l'authentification challenge-réponse.
AuthenticationMethods publickey,keyboard-interactive
Enregistrez et fermez le fichier. Ensuite, modifiez le fichier de règles PAM pour le démon SSH.
sudo nano /etc/pam.d/sshd
Au début de ce fichier, vous pouvez voir la ligne suivante, qui active l'authentification par mot de passe lorsque ChallengeResponseAuthentication
est défini sur yes
. Nous devons commenter cette ligne, car nous utiliserons la clé SSH au lieu du mot de passe.
@include common-auth
Pour activer 2FA dans SSH, ajoutez les deux lignes suivantes.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Enregistrez et fermez le fichier. Redémarrez ensuite le démon SSH pour que la modification prenne effet.
sudo systemctl restart ssh
À partir de maintenant, vous devez utiliser la clé SSH et le code de vérification Google Authenticator pour vous connecter.
Remarques
- Chaque utilisateur de votre serveur Ubuntu doit exécuter
google-authenticator
commande et scannez le code QR afin d'utiliser l'authentification à deux facteurs. Si l'utilisateur n'a pas configuré et tente de se connecter, le message d'erreur "Autorisation refusée (clavier interactif) ” s'affichera. - Le code à gratter d'urgence est votre code de secours. Si vous perdez votre téléphone, vous pouvez saisir l'un des cinq codes à gratter d'urgence au lieu d'un mot de passe à usage unique pour effectuer la vérification en deux étapes. Ces codes sont à usage unique.
- Si vous souhaitez modifier la clé secrète, connectez-vous simplement à votre serveur et exécutez
google-authenticator
commande à nouveau pour mettre à jour le~/.google_authenticator
fichier. - Étant donné que le mot de passe à usage unique est calculé à l'aide de la clé secrète partagée et de l'heure actuelle, il est donc judicieux d'activer la synchronisation de l'heure NTP sur votre serveur Ubuntu pour conserver une heure précise, bien que nous ayons précédemment autorisé un décalage temporel de 4 minutes entre le serveur Ubuntu et l'application mobile. Votre serveur Ubuntu et l'application mobile TOTP peuvent utiliser des fuseaux horaires différents.
Comment désactiver l'authentification à deux facteurs SSH
Modifiez le fichier de règles PAM pour le démon SSH.
sudo nano /etc/pam.d/sshd
Commentez la ligne suivante.
auth required pam_google_authenticator.so
Enregistrez et fermez le fichier. Si vous avez ajouté la ligne suivante dans /etc/ssh/sshd_config
fichier,
AuthenticationMethods publickey,keyboard-interactive
Supprimer le keyboard-interactive
méthode d'authentification.
AuthenticationMethods publickey
Enregistrez et fermez le fichier. Redémarrez ensuite le démon SSH.
sudo systemctl restart ssh