Comment activer deux facteurs pour les connexions SSH
Si vous souhaitez vraiment verrouiller votre serveur cloud, vous pouvez activer l'authentification à deux facteurs pour SSH de la même manière que vous l'ajouteriez à votre compte Gmail, empêchant quiconque d'y accéder s'il a volé votre clé privée SSH.
Sommaire
Est-ce vraiment nécessaire?
Comparé à deux facteurs sur un compte de messagerie ou sur le Web, deux facteurs sur SSH ne sont pas aussi utiles. Pour quelque chose comme le courrier électronique, le point d'échec est généralement des schémas de réinitialisation de mot de passe, des mots de passe facilement craquables ou des violations de données. Vraiment, tout ce qui implique de mauvais mots de passe ou une mauvaise gestion des mots de passe.
Pour SSH, ce n'est pas vraiment un problème. SSH utilise un très bon chiffrement pour les clés publiques et privées qu'il utilise pour établir des connexions. Si votre serveur SSH est verrouillé et n'autorise pas l'accès par mot de passe, personne n'y entre à moins d'avoir le périphérique physique sur lequel se trouve la clé, et il est peu probable que quiconque renforce votre clé SSH à tout moment de ce siècle. Donc, dans un sens, c'est presque comme si vous aviez déjà deux facteurs, car votre clé restera sur votre ordinateur portable.
Mais, dans certains cas marginaux, deux facteurs peuvent être un bon choix. Si un pirate fou décide de voler votre ordinateur portable avec l'intention de prendre vos clés SSH avec lui (et pas seulement de le vendre sur Craigslist quand ils ne peuvent pas casser le mot de passe de votre appareil), avoir deux facteurs vous mettra une longueur d'avance.
Un problème plus réel est cependant avec le transfert d'agent SSH; Lorsque le transfert d'agent est activé, les principales demandes de connexion à des serveurs supplémentaires sont retransmises à votre appareil. Cela vous permet de vous connecter à SSH sur un serveur public et, à partir de ce serveur public, à nouveau à SSH sur un autre serveur privé sur le même réseau, vous donnant un accès similaire au fonctionnement d'un VPN.
Le problème, cependant, est que si le serveur public est compromis, si le transfert d'agent est activé, un attaquant peut agir comme vous pendant que vous êtes connecté au serveur public. Il s'agit d'une escalade de privilèges potentielle, selon la façon dont vous avez configuré votre réseau. SSH à deux facteurs résoudrait ce problème.
Encore une fois, il s'agit d'une solution de cas très pointue, et causera probablement plus de problèmes qu'elle n'en empêche, mais si vous souhaitez vraiment tout verrouiller, nous vous montrerons comment.
Comment activer deux facteurs pour SSH
Pour gérer les demandes à deux facteurs, nous utiliserons le module d'authentification enfichable (PAM) de Google, qui fonctionne avec Authy et Google Authenticator. Installez-le depuis le gestionnaire de paquets de votre distribution:
sudo apt-get install libpam-google-authenticator
Ensuite, exécutez cette commande d'initialisation:
google-authenticator
Répondez oui à la première question sur les jetons d'authentification basés sur le temps. C'est plus sûr. Votre terminal sera alors inondé d'un gigantesque code QR, et vous devrez probablement effectuer un zoom arrière un peu.
Ouvrez votre application d'authentification et scannez votre code (pas la capture d'écran). Votre application doit se synchroniser et commencer à produire des codes à six chiffres qui changent toutes les 30 secondes.
Vous voudrez également noter toutes les sorties supplémentaires, y compris la clé secrète et les codes de travail d’urgence. Ceux-ci sont utilisés pour accéder à nouveau à votre serveur si vous êtes verrouillé pour une raison quelconque, bien que vous deviez être averti que tout problème lié à une mauvaise configuration peut toujours vous laisser verrouillé de manière permanente. Nous activerons éventuellement deux facteurs pour les tests avant de les rendre obligatoires.
Pour les questions suivantes, répondez aux questions suivantes:
- Répondez oui à la mise à jour de votre configuration, sinon rien ne fonctionnera.
- Répondez oui pour interdire plusieurs utilisations de chaque jeton. Ils devraient expirer une fois qu'ils sont utilisés.
- Répondez non à l'extension de la fenêtre de code valide, car cela ne sert à rien.
- Répondez oui pour autoriser la limitation de débit, ce qui bloquera les attaquants après trois tentatives. Vos trois derniers codes seront valides pendant une minute et demie, vous n'aurez donc pas à vous soucier de vous enfermer en étant trop lent.
Toute votre configuration est enregistrée dans ~/.google-authenticator
. Vous pouvez copier ce fichier sur un serveur supplémentaire pour appliquer la même configuration; ne réexécutez pas l'outil d'initialisation, ou vous devrez associer deux appareils distincts.
Configurer SSH pour fonctionner avec Google PAM
Ouvrez le fichier de configuration PAM à /etc/pam.d/sshd
dans votre éditeur de texte préféré, et ajoutez la ligne suivante tout en bas:
auth required pam_google_authenticator.so nullok
le nullok
signifie que ceci est temporaire, donc deux facteurs seront optionnels jusqu'à ce que vous le changiez. Laissez-le de cette façon pour les tests. Vous voudrez également trouver la ligne qui contient @include common-auth
et commentez ceci avec un #
:
# Standard Un*x authentication. #@include common-auth
Cela désactive l'authentification par mot de passe, ce que vous ne voulez pas.
Ensuite, ouvrez les paramètres de SSH à /etc/ssh/sshd_config
. Trouvez le ChallengeResponseAuthentication
et activez-la:
# Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication yes
Cela active 2FA, cependant, les clés SSH remplacent 2FA par défaut, vous devrez donc résoudre ce problème en ajoutant la ligne suivante à la fin de sshd_config
:
AuthenticationMethods publickey,keyboard-interactive
Cela nécessite une clé publique et «interactive au clavier», qui est l'invite qui vous demande votre code à deux facteurs.
SSH est maintenant configuré, vous pouvez donc redémarrer sshd
pour l'activer sur ces nouveaux paramètres:
sudo systemctl restart sshd.service
Cela ne fermera pas votre connexion ouverte, vous devez donc effectuer tout test de connexion dans un onglet de terminal distinct. Ouvrez un nouvel onglet et essayez de vous connecter à votre serveur. Vous devriez voir une invite vous demandant un code de vérification. Entrez-en un à partir de votre téléphone et si tout est correctement lié, cela devrait fonctionner. Si ce n'est pas le cas, vous devriez toujours pouvoir accéder au compte en le laissant vide.
Si tout fonctionne correctement et que vous avez revérifié qu'il n'y a aucun problème de connexion, vous pouvez supprimer le "nullok
”Directive /etc/pam.d/sshd
pour rendre 2FA obligatoire.
Si vous perdez l'accès, vous pouvez toujours vous connecter en utilisant les codes d'urgence qui vous ont été donnés lors de la configuration de PAM, et la clé secrète devrait vous permettre de relier une application TOTP si la vôtre se dissocie pour une raison quelconque.
Ajouter un accès pour les comptes de service
Si vous avez un compte de service qui doit accéder à votre serveur (par exemple, rsync
), vous devez désactiver 2FA pour ce compte. C'est assez facile à faire; nous souhaitons tout d'abord créer un nouveau groupe pour ajouter des comptes de service à:
sudo groupadd service
Ajoutez ensuite l'utilisateur à ce groupe:
sudo useraddsudo usermod -a -G service
Ensuite, ouvrez la configuration PAM à /etc/pam.d/sshd
et ajoutez la ligne suivante:
auth (success=done default=ignore) pam_succeed_if.so user ingroup service
Notez que cela permet d'accéder à votre serveur sans le 2FA, mais si l'utilisateur n'est pas root, cela ne sera peut-être pas énorme.