Comment configurer l’authentification multifacteur sur Ubuntu 18.04

L’auteur a sélectionné la Electronic Frontier Foundation pour recevoir un don dans le cadre de la Write for DOnations programme.

introduction

L’authentification à deux facteurs (2FA) est une méthode d’authentification qui nécessite la saisie de plus d’une information pour pouvoir se connecter à un compte ou à un appareil. En plus de saisir une combinaison de nom d’utilisateur et mot de passe, 2FA nécessite que l’utilisateur entre une information supplémentaire telle qu’un mot de passe unique (one-time password) (OTP), comme un code de vérification à six chiffres.

En général, 2FA nécessite que l’utilisateur entre des informations de différents types:

  • Quelque chose que l’utilisateur connaît, tel qu’un mot de passe

  • Quelque chose que l’utilisateur a, tel que le code de vérification généré à partir d’une application d’authentification

2FA est un sous-ensemble de Multi-factor authentication (MFA), qui, en plus de quelque chose que l’utilisateur connaît et dont il dispose, requiert quelque chose que l’utilisateur is. C’est le cas de la biométrie, qui utilise des technologies telles que la reconnaissance d’empreinte digitale ou vocale.

2FA permet de renforcer le processus d’authentification pour un service ou un appareil donné: même si le mot de passe était compromis, un attaquant devrait également avoir accès au dispositif de l’utilisateur qui contient l’application d’authentificateur utilisée pour générer les codes de sécurité. Pour cette raison, de nombreux services en ligne (including DigitalOcean) offrent la possibilité d’activer 2FA pour les comptes d’utilisateurs afin d’accroître la sécurité des comptes en matière d’authentification. phase.

Dans ce guide, vous allez configurer 2FA pour un utilisateur sudoer non root sur une installation Ubuntu 18.04 avec le module Google PAM. Étant donné que vous configurez 2FA sur un utilisateur non root, vous pourrez toujours accéder à la machine à partir de votre compte * root * en cas de verrouillage. Le didacticiel sera suffisamment général pour être appliqué à la fois aux installations de serveurs et aux postes de travail, locaux et distants.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

Étape 1 - Installation du module Google PAM

Pour configurer 2FA sur Ubuntu 18.04, vous devez installer Google’s module PAM pour Linux. Le module d’authentification _Pluggable Authentication Module (PAM) est le mécanisme d’authentification utilisé par Linux. Vous utiliserez le module PAM de Google pour que votre utilisateur s’authentifie sur 2FA à l’aide de codes OTP générés par Google.

Commencez par vous connecter en tant qu’utilisateur non root que vous avez configuré dans les conditions préalables:

ssh @

Mettez à jour les référentiels Ubuntu pour télécharger la dernière version de l’authentificateur:

sudo apt-get update

Maintenant que vos référentiels sont à jour, installez la dernière version du module PAM:

sudo apt-get install libpam-google-authenticator

Ceci est un très petit paquet sans dépendances, il faudra donc quelques secondes pour l’installer. Dans la section suivante, vous allez configurer 2FA pour l’utilisateur non root du système.

Étape 2 - Configuration de 2FA pour un utilisateur

Maintenant que vous avez installé le module PAM, vous l’exécuterez pour générer un code QR pour l’utilisateur connecté. Cela créera le code, mais l’environnement Ubuntu n’aura pas besoin de 2FA avant de l’avoir activé plus tard dans ce tutoriel.

Exécutez la commande + google-authenticator + pour démarrer et configurer le module PAM:

google-authenticator

La commande présentera une invite qui vous posera plusieurs questions de configuration. La première question vous demandera si vous voulez que les jetons soient basés sur le temps. Les jetons d’authentification basés sur le temps expireront après une durée définie, fixée par défaut à 30 secondes sur la plupart des systèmes. Les jetons basés sur le temps sont plus sécurisés que les jetons qui ne sont pas basés sur le temps, et la plupart des implémentations 2FA les utilisent. Vous pouvez choisir l’une ou l’autre des options ici, mais ce didacticiel choisira + Oui + pour utiliser des jetons d’authentification basée sur le temps:

OutputDo you want authentication tokens to be time-based (y/n)

Après avoir répondu à cette question, plusieurs lignes apparaîtront sur votre console:

  • Un code QR: Il s’agit du code dont vous avez besoin pour numériser à l’aide de votre application d’authentification. Une fois que vous l’avez numérisé, il se transformera immédiatement en un appareil générateur de code qui créera un nouveau mot de passe à usage personnel toutes les 30 secondes.

  • Votre clé secrète: Il s’agit d’une méthode alternative pour configurer votre application d’authentification. Si vous utilisez une application qui ne prend pas en charge l’analyse QR, vous pouvez entrer la clé secrète pour configurer votre application d’authentification.

  • Votre code de vérification: Il s’agit du premier code de vérification à six chiffres généré par ce code QR spécifique.

  • Vos codes de grattage d’urgence: également appelés codes de sauvegarde, ces jetons à usage unique vous permettront de réussir l’authentification 2FA si vous perdez votre périphérique d’authentification. Conservez ces codes dans un endroit sûr pour éviter tout blocage du compte.

Une fois que vous avez configuré votre application d’authentification et enregistré vos codes de sauvegarde dans un endroit sûr, le message vous demande si vous souhaitez mettre à jour le fichier de configuration. Si vous choisissez + n +, vous devrez réexécuter le programme de configuration. Vous allez entrer + y + pour enregistrer vos modifications et aller de l’avant:

OutputDo you want me to update your "~/.google_authenticator" file (y/n)

La question suivante vous demandera si vous souhaitez interdire l’utilisation des codes d’authentification plus d’une fois. Par défaut, vous ne pouvez utiliser chaque code qu’une seule fois, même s’il reste valide pendant 30 secondes. Il s’agit du choix le plus sûr car il empêche les attaques par rejeu de la part d’un attaquant qui aurait réussi à récupérer votre code de vérification après l’avoir utilisé. Pour cette raison, il est plus sûr de ne pas autoriser l’utilisation de codes plus d’une fois. Répondez + y + pour interdire plusieurs utilisations du même jeton:

OutputDo you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

La question suivante vous demande si vous souhaitez que les jetons d’authentification soient acceptés peu de temps avant ou après leur heure de validité normale. Les codes de vérification sont très sensibles au temps, ce qui signifie que vos jetons peuvent être refusés si vos périphériques ne sont pas synchronisés. Cette option vous permet de contourner ce problème en prolongeant la durée de validité par défaut des codes de vérification de sorte que même si vos appareils étaient temporairement désynchronisés, vos codes d’authentification seraient néanmoins acceptés. S’assurer que l’heure est la même sur tous vos appareils est la meilleure option, car choisir + yes + diminuera la sécurité de votre système. Répondez + n + à cette question pour ne pas permettre un délai de grâce:

OutputBy default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n)

La dernière question vous demande si vous souhaitez activer la limitation de débit pour les tentatives de connexion. Cela ne permettra pas plus de trois tentatives de connexion infructueuses toutes les 30 secondes, ce qui est une bonne technique de renforcement de la sécurité. Activez-le en répondant + y +:

OutputIf the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n)

Vous avez maintenant configuré et généré des codes 2FA pour l’utilisateur non root avec le module PAM. Maintenant que vos codes sont générés, vous devez activer 2FA dans votre environnement.

Étape 3 - Activer 2FA dans Ubuntu

Le module Google PAM génère maintenant des codes 2FA pour votre utilisateur, mais Ubuntu ne sait pas encore qu’elle doit utiliser ces codes dans le cadre du processus d’authentification de l’utilisateur. Au cours de cette étape, vous allez mettre à jour la configuration d’Ubuntu afin d’exiger des jetons 2FA en plus de la méthode d’authentification habituelle.

Vous avez deux options différentes à ce stade:

  • Vous pouvez exiger 2FA à chaque fois qu’un utilisateur se connecte au système et à chaque fois qu’un utilisateur demande les privilèges + sudo +.

  • Vous ne pouvez utiliser 2FA que lors de la connexion, les tentatives d’authentification subséquentes + sudo + ne nécessitant que le mot de passe de l’utilisateur.

La première option sera idéale pour un environnement partagé, où vous voudrez peut-être protéger toutes les actions nécessitant des autorisations + sudo +. La deuxième approche est plus pratique pour un environnement de bureau local, où vous êtes le seul utilisateur du système.

Nécessite 2FA pour les demandes de connexion et sudo

Pour être invité à entrer 2FA lors de la connexion et des demandes d’élévation de privilèges suivantes, vous devez modifier le fichier + / etc / pam.d / common-auth + en ajoutant une ligne à la fin du fichier existant.

Le fichier + common-auth + 's’applique à tous les mécanismes d’authentification sur le système, quel que soit l’environnement de bureau utilisé. Cela s’applique également aux demandes d’authentification qui se produisent _après- l’utilisateur se connecte au système, comme lors d’une demande d’escalade + sudo + lors de l’installation d’un nouveau package à partir du terminal.

Ouvrez ce fichier avec la commande suivante:

sudo nano /etc/pam.d/common-auth

Ajoutez la ligne en surbrillance à la fin du fichier:

/etc/pam.d/common-auth

...
# and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Cette ligne indique au système d’authentification Ubuntu d’exiger 2FA lors de la connexion via le module Google PAM. L’option + nullok + permet aux utilisateurs existants de se connecter au système même s’ils n’ont pas configuré l’authentification 2FA pour leur compte. En d’autres termes, les utilisateurs qui ont configuré 2FA devront entrer un code d’authentification lors de la prochaine connexion, tandis que les utilisateurs n’ayant pas exécuté la commande + google-authenticator + pourront se connecter avec uniquement leur nom d’utilisateur et leur mot de passe. jusqu’à ce qu’ils configurent 2FA.

Enregistrez et fermez le fichier après avoir ajouté la ligne.

Nécessite 2FA pour ouvrir une session uniquement

Si vous souhaitez uniquement être invité à entrer 2FA lorsque vous vous connectez pour la première fois au système dans un environnement de bureau, vous devez modifier le fichier de configuration du gestionnaire de bureau que vous utilisez. Le nom du fichier de configuration correspond généralement au nom de l’environnement de bureau. Par exemple, le fichier de configuration pour + gdm +, l’environnement de bureau Ubuntu par défaut commençant après Ubuntu 16.04, est + / etc / pam.d / gdm +.

Dans le cas d’un serveur sans interface utilisateur, tel qu’un droplet DigitalOcean, vous modifierez plutôt le fichier + / etc / pam.d / common-session +. Ouvrez le fichier correspondant à votre environnement:

sudo nano

Ajoutez la ligne en surbrillance à la fin du fichier:

/etc/pam.d/common-session

#
# /etc/pam.d/common-session - session-related modules common to all services
#
...
# # and here are more per-package modules (the "Additional" block)
session required    pam_unix.so
session optional    pam_systemd.so
# end of pam-auth-update config

Cela indiquera à Ubuntu de requérir 2FA lorsqu’un utilisateur se connecte au système via la ligne de commande (soit localement, soit à distance via SSH), mais pas lors de tentatives d’authentification ultérieures, telles que les requêtes + sudo +.

Vous avez maintenant configuré avec succès Ubuntu pour vous inviter à entrer 2FA soit juste lors de la connexion, soit pour chaque action authentifiée effectuée sur le système. Vous êtes maintenant prêt à tester la configuration et à vous assurer que vous êtes invité à entrer 2FA lorsque vous vous connectez à votre installation Ubuntu.

Étape 4 - Test de 2FA

Au cours de l’étape précédente, vous avez configuré 2FA pour générer des codes toutes les 30 secondes. Dans cette étape, vous testerez 2FA en vous connectant à votre environnement Ubuntu.

Commencez par vous déconnecter et vous reconnecter à votre environnement Ubuntu:

ssh @

Si vous utilisez une authentification basée sur un mot de passe, vous serez invité à saisir votre mot de passe utilisateur:

OutputPassword:

Entrez votre mot de passe et vous serez invité à entrer le code de vérification 2FA:

OutputVerification code:

Après avoir entré votre code de vérification, vous serez connecté:

Output@: ~#

Si 2FA n’était activé que pour les connexions, vous ne serez plus invité à saisir vos codes 2FA avant l’expiration de la session ou la déconnexion manuelle.

Si vous avez activé 2FA via le fichier + common-auth +, il vous sera demandé à chaque connexion et demande de privilèges sudo:

Output@: ~# sudo -s

sudo password for :



root@:

Dans cette étape, vous avez confirmé que votre configuration 2FA fonctionnait comme prévu. Si vous n’avez pas été invité à entrer vos codes de vérification au cours de cette phase, revenez à la troisième étape du didacticiel et confirmez que vous avez modifié le fichier d’authentification Ubuntu approprié.

Étape 5 - Prévention du verrouillage 2FA

En cas de perte ou d’effacement d’un téléphone, il est important de disposer des méthodes de sauvegarde appropriées pour récupérer l’accès à votre compte 2FA activé. Lorsque vous configurez 2FA pour la première fois, vous disposez de quelques options pour vous permettre de récupérer après un verrouillage:

  • Enregistrez une copie de sauvegarde de vos codes de configuration secrets dans un endroit sûr. Vous pouvez le faire manuellement, mais certaines applications d’authentification comme Authy fournissent des fonctionnalités de code de sauvegarde.

  • Enregistrez vos codes de récupération dans un endroit sûr, accessible en dehors de votre environnement activé 2FA.

Si, pour une raison quelconque, vous n’avez pas accès à vos options de sauvegarde, vous pouvez prendre des mesures supplémentaires pour récupérer l’accès à votre environnement local ou à votre serveur distant activé 2FA.

Étape 6 - Récupération à partir d’un verrouillage 2FA sur un environnement local (facultatif)

Si vous avez un accès physique à la machine, vous pouvez démarrer en mode de secours pour désactiver 2FA. Le mode Rescue est un type target (similaire à un runlevel) sous Linux utilisé pour effectuer des tâches administratives. Vous devrez modifier certains paramètres dans GRUB, qui est le chargeur de démarrage par défaut dans Ubuntu, pour passer en mode de secours.

Pour accéder à GRUB, vous devez d’abord redémarrer votre ordinateur:

reboot

Lorsque le menu GRUB apparaît, assurez-vous que l’entrée * Ubuntu * est en surbrillance. C’est le nom par défaut sur une installation 18.04, mais il peut être différent si vous l’avez modifié manuellement après l’installation.

image: https: //assets.digitalocean.com/articles/CART-64052/grub_menu.png [Le menu GRUB par défaut dans Ubuntu 18.04]

Ensuite, appuyez sur la touche + e + de votre clavier pour modifier la configuration de GRUB avant de démarrer sur votre système.

image: https: //assets.digitalocean.com/articles/CART-64052/grub_edit.png [Le fichier de configuration GRUB en mode édition]

Dans le fichier qui apparaît, faites défiler jusqu’à une ligne commençant par + linux + et se terminant par + $ vt_handoff +. Allez à la fin de cette ligne et ajoutez + systemd.unit = rescue.target +, en vous assurant de laisser un espace entre + $ vt_handoff + et + systemd.unit = rescue.target +. Cela indiquera à votre machine Ubuntu de démarrer en mode de secours.

image: https: //assets.digitalocean.com/articles/CART-64052/grub_rescue.png [Modification du fichier de configuration GRUB pour activer le mode de maintenance]

Une fois les modifications apportées, enregistrez le fichier avec la combinaison de touches + Ctrl + X +. Votre machine va redémarrer et vous vous retrouverez sur une ligne de commande. Appuyez sur + Entrée pour passer en mode de secours.

image: https: //assets.digitalocean.com/articles/CART-64052/rescue_mode.png [Invite du mode de maintenance de la ligne de commande sous Ubuntu 18.04]

Une fois en mode de secours, ouvrez le fichier de configuration de Google Authenticator. Celui-ci sera situé dans le répertoire de base de l’utilisateur verrouillé:

nano /home//.google-authenticator

La première ligne de ce fichier est la clé secrète de l’utilisateur, utilisée pour configurer une application d’authentification.

Vous avez maintenant deux choix:

  • Vous pouvez copier la clé secrète et configurer votre application d’authentification.

  • Si vous souhaitez partir d’une table rase, vous pouvez supprimer le fichier + ~ / .google-authenticator afin de désactiver 2FA pour cet utilisateur. Après vous être reconnecté en tant qu’utilisateur non root, vous pouvez configurer 2FA à nouveau et obtenir une nouvelle clé secrète.

Quel que soit le choix, vous pouvez récupérer un verrouillage 2FA sur un environnement local en utilisant le chargeur de démarrage GRUB. Dans l’étape suivante, vous récupérerez d’un verrouillage 2FA sur un environnement distant.

Étape 7 - Récupération à partir d’un verrouillage 2FA sur un environnement distant (facultatif)

Si votre compte sudoer non root est verrouillé sur une machine distante, vous pouvez utiliser l’utilisateur * root * pour désactiver temporairement 2FA ou reconfigurer 2FA.

Commencez par vous connecter à votre ordinateur avec l’utilisateur * root *:

ssh root@

Une fois connecté, ouvrez le fichier de paramètres de Google Authenticator situé dans le répertoire de base de l’utilisateur verrouillé:

sudo nano /home//.google_authenticator

La première ligne de ce fichier est la clé secrète de l’utilisateur, qui vous permet de configurer une application d’authentification.

Vous avez maintenant deux choix:

  • Si vous souhaitez configurer un nouveau périphérique ou un périphérique effacé, vous pouvez utiliser la clé secrète pour reconfigurer votre application d’authentification.

  • Si vous souhaitez partir d’une table rase, vous pouvez supprimer le fichier + / home //. Google_authenticator afin de désactiver 2FA pour cet utilisateur. Une fois connecté en tant qu’utilisateur non root, vous pouvez configurer 2FA à nouveau et obtenir une nouvelle clé secrète.

Quel que soit le choix, vous avez été en mesure de récupérer un verrouillage 2FA sur un environnement local à l’aide de l’utilisateur * root *.

Conclusion

Dans ce tutoriel, vous avez configuré 2FA sur une machine Ubuntu 18.04. Avec 2FA configuré sur votre environnement, vous avez ajouté une couche de protection supplémentaire à votre compte et rendu votre système plus sécurisé. En plus de votre méthode d’authentification traditionnelle, vous devrez également saisir un code de vérification supplémentaire pour vous connecter. Cela rend impossible pour un attaquant qui a réussi à obtenir vos informations de connexion de pouvoir se connecter à votre compte sans ce code de vérification supplémentaire.