A travers cette article, il sera expliqué de manière simple comment ajouter une double authentification google avec google-authenticator sur un serveur SSH.
Cette technique, permet d’augmenter la sécurité d’accès au serveur.
Pré-requis
- Avoir un serveur SSH fonctionnel
- Avoir l’application Google Authentification installée sur téléphone Android
- Un peu de courrage.
Installation de google-authenticator sur le serveur SSH
Les explications qui suivent ont été éxécutées sur un serveur Debian et les commandes sont en éxécutées tant que root, sauf lorsque c’est précisé.
- Mise à jour du système:
apt-get update && apt-get upgrade
apt-get install build-essential make libpam0g-dev libpam0g
Se rendre dans le répertoire /usr/local/src/
cd /usr/local/src/
Téléchargement de l’archive:
wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2 -O gauth.tar.bz2
tar -xf gauth.tar.bz2 && sudo rm gauth.tar.bz2 cd libpam-google-authenticator-1.0/
make && make install
Configuration de Google google-authenticator
Lancer simplement la commande google-authenticator:
google-authenticator
Google-authenticator fourni une url, qui faut coller dans le navigateur internet:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/freddy@manjaro-pc%3Fsecret%3DDPL32JC6ZYVNNN2K Your new secret key is: DPL32JC6ZYVNNN2K Your verification code is 069063 Your emergency scratch codes are: 43429718 84487778 31694038 23138763 60510853
Une fois l’URL collée dans le navigateur, un QRcode s’affiche:
Avec son téléphone android, il faut scanner le QRCode avec par exemple l’application open-source ZXing.
Dès lors que le QRcode est scanné, l’applicatyion Android Google Authentification s’ouvre et fournis le code secret:
Puis, d’autres questions vont être posées. Dans mon cas j’ai répondu à « yes » à toutes les questions.
Configuration du serveur SSH
Authentifaction PAM sur le serveur SSH, édition de /etc/pam.d/sshd en tant que root:
nano /etc/pam.d/sshd
Ajouter à la fin du fichier:
auth required pam_google_authenticator.so
Ensuite édition du fichier /etc/ssh/sshd_config:
nano /etc/ssh/sshd_config
A la ligne ChallengeResponseAuthentication changer la valeur no par yes.
Avant de redémarrer le serveur SSH, assurez-vous que vous avez mis en place le Google Authenticator sur votre téléphone, et les codes de sauvegarde. Vérifiez encore une fois. Sauf si vous voulez prendre le risque de verrouillage de votre machine.
Une fois que vous êtes sûr à 1000%, on, redémarre le serveur SSH:
service ssh restart
Test de la double authenfication sur le serveur SSH
Test de connexion en grandeur nature sur un serveur:
Lorsque j’ai saisie le code vérification, j’ai pu me connecter à mon serveur de supervision!
Un petit détail, qui peut avoir une grande importance: vérifier la cohérence de la date entre le serveur et le téléphone Android, car si les deux machines ne sont pas à la même heure, celà peut empêcher de générer des codes valides.
Finalisation
Une fois que tout est bon, il faut penser à désinstaller les outils de compilation car celà peut-être un moyen à un pirate de créer des exploites sur le serveur.
apt-get remove --purge build-essential make
ps: les codes et le QRcode dans l’article ont été créés sur une machine Manjaro et ne sont plus d’actualité ;-)
source
Et l’astuce de la vérification de la date: via whoami.tobehost.net
Intéressant, juste un peu peur du « Sauf si vous voulez prendre le risque de verrouillage de votre machine. »
Sinon effectivement ça peux être utile.
Il y a toujours un risque de fausse manip et si on ne vérifie pas plusieurs fois les fichiers de conf, lorsque tu vas restarter ton serveur ssh tu perdra simplement la connexion sans moyen de te connecter :-)
Bonjour,
Superbe article, mais il y a un hic… c’est de ne jamais mettre un QRcode comme ça, on peut récupérer l’adresse mail. Enfin j’espère pour vous que c’était juste pour l’expérience.
Ça vaut ce que ça vaut mais c’était juste vous prévenir.
freddy@magero-pc
Euh, génial je viens juste de voir que c’était effectivement pour l’expérience… oups désolé ;)