Activer la 2FA

Activer la double authentification par TOTP sur un serveur SSH #

Sources

Côté serveur #

Le but est d’activer la double authentification pour ouvrir un session SSH lorsqu’une clé RSA (ou autre) ne peut pas être fournie. Cette technique s’appuie sur le TOTP (Time One Time Password), on génère un code temporaire toutes les minutes qui peut être récupéré à l’aide d’un logiciel ou d’un autre appareil.

Commençons par installer le nécessaire sudo apt update && sudo apt upgrade && sudo apt install oathtool libpam-oath. Puis on édite le fichier de configuration associé aux sessions SSH sudo nano /etc/pam.d/sshd :

...
#@include common-auth
auth    requisite      pam_unix.so
auth    sufficient pam_oath.so usersfile=/etc/users.oath window=10 digits=6
auth    required        pam_deny.so

...

Puis on renseigne les informations sur le TOTP dans un fichier sudo nano /etc/users.oath où l’on place une ligne pour chaque utilisateur comme cela : HOTP/T30/6 <user> - <30 characters hex string>, par exemple HOTP/T30/6 bob - 6ddc816bd8f5c4560e8801e464144f, puis on protège ce fichier en lecture/écriture sudo chmod 600 /etc/users.oath. Enfin on autorise la saisie du deuxième facteur en modifier la configuration de SSHD sudo nano /etc/ssh/sshd_config :

...
#ChallengeResponseAuthentication no
ChallengeResponseAuthentication yes
...

Enfin on recharge la configuration du service sshd sudo systemctl reload sshd. Avant de fermer la session actuelle pensez à tester que tout fonctionne correctement afin d’éviter de rester coincé à l’extérieur sans pouvoir agir.

pour obtenir la chaîne en hexadécimal de trente caractères on peut lancer head -10 /dev/urandom | md5sum | cut -b 1-30.

Côté client #

Il existe plusieurs applications smartphone ou PC pour générer des TOTP. Je vais présenter comment obtenir des code via la commande oathtool puis comment l’intégrer au gestionnaire de mot de passe pass.

On lance la commande oathtool --totp <30 characters hex string> pour obtenir un code. Pour intégrer à pass la génération il faut avoir installé l’extension pass-otp puis ajouter dans le fichier correspondant au mot de passe une chaîne comme celle-ci otpauth://totp/totp-secret?secret=<base32 string>. On obtient cette chaîne en base 32 avec la commande oathtool -v --totp <30 characters hex string>.