Serveur de travail

Le présent document a été testé sur une debian 9 "Stretch"

OTP

sudo apt install libpam-oath oathtool qrencode caca-utils
wget https://raw.githubusercontent.com/mcepl/gen-oath-safe/master/gen-oath-safe (1)
1 Le fichier ainsi téléchargé peut être personnalisé pour l’utilisateur de FreeOTP

Passons à la génération du qrcode et à la configuration :

chmod u+x ./gen-oath-safe
./gen-oath-safe art:<username> hotp
J’ai mis art mais on peut changer pour avoir plusieurs codes dans la liste FreeOTP

Génère le QRCode qui peut être scanné et indique le HEX à mettre dans le usersfile :

sudo mkdir -p /etc/liboath
echo "HOTP <username> - <hexcode>" | sudo tee -a /etc/liboath/users.oath (1)
1 ATTENTION: Si vous relancez la commande plusieurs fois, il y accumulation des différentes saisies dans le fichier. Veillez à supprimer les lignes non-souhaitées par la suite.

Pour la re-génération du qrcode en cas de perte, il faut le HEX code :

gen-oath-safe art:<username> hotp <hexcode>
Lors de la re-génération du QRCode, il y a perte de synchronisation !!
Pour remédier au problème, il faut prévoir un compte de secours utilisé uniquement dans cas.

Certificates

Génération des clefs

Ne pas utiliser openSSH pour la génération des clefs car Putty ne saura pas gérer la clef privée. Il est nécessaire d’utiliser l’outil PuttyGen pour cela (en revanche, openssh se satisfera très bien de la clef publique).
Voici un lien vers un tutoriel expliquant l’utilisation de PuttyGen dans ce cas précis.

Si vous ne savez pas quel encryptage utilisé, prenez ecdsa 521 bits. A partir de PuttyGen, vous copierez entièrement la clef publique pour la mettre dans le fichier attendu par sshd (voir la configuration du fichier plus loin) :

mkdir ~/.ssh
echo "<toute_ma_clef_publique>" > ~/.ssh/authorized_keys

Configuration à proprement parlé

Configuration du daemon ssh
sudo nano /etc/ssh/sshd_config
PubkeyAuthentication yes (2)
AutorizedKeysFile .ssh/authorized_keys (2)

AuthenticationMethods publickey,keyboard-interactive:pam (1)

ChallengeResponseAuthentication yes
UsePAM yes
1 Cette ligne ne doit être présente qu’en cas de MFA, sinon il est impératif de l’enlever ! (e.g. Si on utilise OTP seul on ne met pas la ligne)
2 Uniquement si on fait auth avec clé (ne pas mettre si OTP seul)
Attendez d’avoir fini toutes les configurations avant de redémarrer le serveur ssh (sinon vous risquez de vous retrouver dans l’incapacité de vous connecter par la suite !)
Configuration des PAM (à mettre en tout début de fichier)
sudo nano /etc/pam.d/sshd
auth required pam_unix.so
auth requisite pam_oath.so usersfile=/etc/liboath/users.oath window=10 digits=6
# @include common-auth (1)
1 Si l’on oublie de commenter cette ligne le mot de passe va être redemandé et vérifié une deuxième fois, ce qui n’est pas voulu !
Redémarrage du service SSH
sudo systemctl restart sshd

Procédure de secours !

il est impératif de créer un utilisateur en 3FA qui pourra accéder au usersfile pour réinitialiser l’OTP.

useradd -m <secours>
echo "<secours>:<mdp secours>" | chpasswd

Dans /home/<secours> créer dossier .ssh et copier la clef publique de root.
Le dossier .ssh en 700 et les propriétaires doivent être <secours>:<secours>; idem pour les droits de propriétés de la clef.

Pour finir, utiliser la procédure gen-oath-user déjà utilisée auparavant.