Comment installer et utiliser OTPW pour les mots de passe SSH à usage unique sur Ubuntu 14.04

introduction

SSH est livré avec de nombreuses fonctionnalités de sécurité pour vous assurer que vos connexions sont sécurisées et que vous pouvez vous authentifier auprès d’un hôte distant sans soucis. En particulier, les clés SSH créent un moyen sécurisé de se connecter sans transmettre votre mot de passe ou votre phrase secrète sur Internet.

Cependant, il existe des situations dans lesquelles l’utilisation d’une clé SSH n’est pas raisonnable ou risque en réalité d’être précaire. Disons que vous essayez d’utiliser SSH à partir d’un ordinateur public ou d’un ordinateur que vous essayez de dépanner pour un ami. Le système de clé publique suppose que l’ordinateur auquel vous vous connectez from est au moins assez digne de confiance. Ce n’est pas toujours le cas.

Si vous utilisez une paire de clés dans ce scénario, même si votre clé est protégée par un mot de passe, la clé sera déchiffrée et insérée dans la mémoire de la machine locale avec laquelle travailler, au moins pour s’authentifier. Cela signifie qu’il est vulnérable si vous ne faites pas confiance à la machine locale.

Un système appelé * authentification par mot de passe unique * ou OTPW a été créé pour fonctionner dans ce genre de situation. Les mots de passe à usage unique sont un système qui a été intégré à d’autres mécanismes d’autorisation, tels que l’authentification à deux facteurs et les solutions de connexion unique.

Dans ce guide, nous allons configurer OTPW sur une instance VPS Ubuntu 14.04. Cela nous permettra de nous connecter avec un mot de passe à deux composants qui ne peut être utilisé qu’une seule fois.

Concept de base

OTPW fonctionne en se connectant au système d’authentification PAM.

Une fois que vous avez configuré votre système pour autoriser les connexions avec OTPW, vous pouvez générer un ensemble de «morceaux» de mots de passe en fournissant un mot de passe de préfixe. Vous pouvez ensuite les imprimer, les conserver sur un périphérique auquel vous aurez accès et en qui vous aurez confiance (comme crypté sur votre téléphone), ou dans un autre format auquel vous pourrez accéder sans passer à l’aide d’un ordinateur en qui vous n’avez pas confiance.

Maintenant, lorsque vous êtes invité à entrer un mot de passe, vous recevrez un numéro de référence. Vous allez entrer le mot de passe de préfixe que vous avez créé, suivi de la portion de mot de passe associée au numéro de référence donné.

Ce mot de passe ne fonctionnera qu’une fois. Si une personne enregistre les clés sur votre ordinateur ou est capable de vous voir taper le mot de passe, cela n’aura pas d’importance, car il ne sera plus valide après votre connexion.

Installer les composants

Pour configurer ce système, nous devons d’abord installer les composants nécessaires.

Étant donné que l’authentification est entièrement gérée côté serveur et que l’extrémité du client n’est pas différente d’une invite de mot de passe classique, nous n’installerons que quelques packages sur notre serveur.

Nous mettrons à jour notre cache de paquets et installerons ceux-ci à partir du référentiel:

sudo apt-get update
sudo apt-get install otpw-bin libpam-otpw

Comme vous pouvez le constater, le mécanisme est divisé en deux parties. Le premier composant est utilisé pour générer et gérer les mots de passe à usage unique. Le second est le plug-in utilisé avec PAM pour s’authentifier auprès de ces fichiers de mots de passe.

Modification de PAM pour tirer parti de OTPW

Avant de faire quoi que ce soit avec nos mots de passe, nous devrons ajouter OTPW en tant qu’option pour PAM.

Nous voulons accomplir cela d’une manière qui limite les connexions par mot de passe habituelles, car nous supposons que vous avez déjà https://www.digitalocean.com/community/articles/how-to-set-up-ssh-keys—​2 [ configurez des clés SSH] pour l’authentification sur des ordinateurs de confiance. Notre configuration utilisera les clés SSH si elles sont disponibles, sinon, elle aura recours au mécanisme OTPW.

Pour ce faire, nous allons uniquement modifier le fichier impliqué dans la connexion SSH. Cela n’interférera pas avec nos connexions locales ou avec nos connexions via la console Web DigitalOcean.

Ouvrez le fichier de configuration SSH PAM:

sudo nano /etc/pam.d/sshd

Vers le haut du fichier, il y a une directive destinée à importer le fichier + common-auth +. Ce fichier permet une authentification régulière par mot de passe sans utiliser le système OTPW, ce que nous ne souhaitons pas pour nos sessions SSH. Laissez-nous commenter cela:

#@include common-auth

Ci-dessous, ajoutons quelques lignes nous permettant d’utiliser le système OTPW pour traiter les demandes de mot de passe:

auth    required    pam_otpw.so
session optional    pam_otpw.so

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Configurer SSHD

Maintenant que le module PAM du démon SSH est configuré pour utiliser OTPW, nous pouvons configurer le démon lui-même avec les valeurs appropriées.

Ouvrez le fichier avec les privilèges root pour extraire le fichier:

sudo nano /etc/ssh/sshd_config

Nous recherchons quelques valeurs distinctes. Nous devons vérifier que chacun de ces paramètres est défini sur la valeur ci-dessous. Si vous ne trouvez aucun des paramètres, ajoutez-les et définissez-les. Veillez toutefois à ne pas ajouter plusieurs paramètres, car ils peuvent entraîner l’échec du démon.

UsePrivilegeSeparation yes
PubkeyAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes

Une fois que vous avez défini ces paramètres, souhaitez redémarrer notre démon SSH afin que nos modifications prennent effet:

sudo service ssh restart

Création de fichiers de mots de passe OTPW

Maintenant que notre système est configuré pour utiliser OTPW pour les utilisateurs SSH ne disposant pas de clé publique, nous pouvons créer les deux fichiers de mots de passe nécessaires au fonctionnement de ce système.

Un fichier, qui sera stocké dans + ~ / .otpw +, contiendra une valeur hachée des segments de mot de passe, une par ligne. Le deuxième fichier que nous allons créer est constitué des segments de mot de passe à utilisation unique lisibles par l’homme, que nous devons copier sur un périphérique sécurisé, les imprimer ou les mettre dans un autre emplacement sécurisé et portable.

Pour générer cette liste, il suffit d’appeler la commande + otpw-gen +. En règle générale, le texte lisible par l’utilisateur est exporté vers la sortie standard, mais nous pouvons le transférer dans un fichier pour le conserver en toute sécurité:

cd ~
otpw-gen > nothingtosee.txt

Cela va générer une graine aléatoire et demander un préfixe de mot de passe. Vous devez utiliser les mêmes règles de bon sens que vous utiliseriez pour tout mot de passe habituel. Assurez-vous de vous souvenir du mot de passe.

Ensuite, vous aurez un fichier + ~ / .otpw + qui contient les valeurs hachées des suffixes de mot de passe, un par ligne:

OTPW1
280 3 12 8
253tFMngG2PNYhn
132Kua%SZ+esb6t
237yH7D2FMbQsyW
125rrXfBRwnF+A%
106gJxhJE4jkknj
04135:5:knWIB4:
232/d4kI:n57IcD
244RASe8ka63b8Z
057GmqfFe=pXQqu
. . .

Vous avez également transféré vos suffixes non coupés avec leur numéro de référence dans un fichier `` ~ ~ / nothingtosee.txt + `.

OTPW list generated 2014-04-03 18:06 on sshd

000 /rGF h5Hq  056 /zi5 %yTJ  112 J7BT HdM=  168 fdBm X%Tn  224 69bi =9mE
001 GoOG jxYQ  057 E=o3 kuEF  113 zwit p27J  169 nHK9 CXRx  225 IihF =o8g
002 Xm=E PuXc  058 Ok27 ZJ++  114 On=5 pNYH  170 ZRDa mB5e  226 yYsb CAfn
003 deL+ iHs7  059 /WGS :J4M  115 ZZd/ 8zyU  171 acDd dESV  227 ddjg ipcR
004 KhDn NdfS  060 =tEz ACye  116 FkQ9 8kSu  172 iRSR nZWT  228 9hHd veZ9
005 rGFG K5=7  061 MvUW LRxc  117 2YwY axJJ  173 kEV5 T/Vz  229 wx%n Le6P
006 GWi2 fHjf  062 qOR: WN2x  118 FvD4 oNjT  174 99OT 8KPy  230 /I=Y hicP
007 XPom pEYp  063 8Xvm vZGa  119 UNjF :Kys  175 b95i SU3R  231 keLn aDcK
008 fJI% 3Qs2  064 3I7Q I2xc  120 5Tm9 REQK  176 AVg: 4ijE  232 :aIF op6V
009 P/Sn dSxA  065 A+J6 =4zo  121 LAyj 3m2+  177 TMuN 9rJZ  233 SWvB %+cL
. . .

La colonne de gauche est le numéro de référence suivi de 8 caractères pour le suffixe. L’espace entre les 4 premiers et les 4 derniers caractères du suffixe sert à la lisibilité et peut éventuellement être supprimé lorsque vous entrez le suffixe.

Par défaut, le générateur produit suffisamment de suffixes pour tenir sur un morceau de papier standard, ce qui est excellent pour l’impression et un moyen de transporter la sortie.

Vous devrez effectuer cette procédure pour chaque utilisateur pour lequel vous souhaitez configurer un accès par mot de passe à utilisation unique.

L’essayer

Depuis un ordinateur non configuré avec votre clé SSH (vous pouvez également déplacer temporairement votre clé hors de votre répertoire + ~ / .ssh +), vous pouvez tester le nouveau système de mot de passe à utilisation unique.

Connectez-vous à l’utilisateur que vous avez configuré avec OTPW comme vous le feriez normalement:

'' '' '

Password 253:

Comme vous pouvez le constater, nous avons reçu le suffixe souhaité par OTPW.

Tout d’abord, entrez votre mot de passe préfixe, suivi directement du suffixe sur la même ligne, sans espace entre votre mot de passe préfixe et le suffixe. Vous pouvez conserver l’espace indiqué dans le fichier de suffixe si vous le souhaitez.

Alors disons que mon mot de passe préfixe est "crazyburr! To", et que le fichier de suffixe a une colonne qui ressemble à ceci:

249 N4HY RsbH
250 +vAz fawn
251 O4/R ZrhM
252 c6kP jgUT

254 aYzA :F64
255 3ezp ZpIq
256 ggIi TD2v

Dans ce cas, nous pourrions taper “crazyburr! ToI = aA OKSz” ou “crazyburr! ToI = aAOKSz”.

Vous devriez alors pouvoir vous connecter sans problème. Si vous vérifiez votre fichier + ~ / .otpw +, vous verrez que l’une des lignes hachées a été remplacée par des tirets:

. . .
091icM5kSPVOdcU
274Uf3q/=kTYcu8
229fHfmIsCj7mjQ
---------------
115EzDO6=jM/sOT
143iWCdteSk3kg7
265S+QTGcg+MAZO
174UgXchxsI2g:G
. . .

Cela signifie que le suffixe a été utilisé et n’est plus valide.

Si deux personnes tentent de se connecter au compte en même temps, OTPW vous demandera votre mot de passe de préfixe, suivi de suffixes three. Chacun des trois suffixes demandés sera différent, de sorte qu’une personne qui enregistre au clavier et qui essaie de vous battre pour appuyer sur la touche Entrée ne pourra pas terminer cette opération avec succès.

L’invite ressemblera à ceci:

Password 161/208/252:

Un fichier + ~ / .otpw.lock + est créé dans cette situation. Après une connexion réussie, il devrait être supprimé, mais il existe un bogue qui empêche ce fonctionnement dans certaines situations. Dans ce cas, supprimez simplement le verrou manuellement:

rm ~/.otpw.lock

La prochaine fois, un seul mot de passe vous sera demandé.

Mises en garde et bugs

J’ai mentionné ci-dessus comment parfois le fichier de verrouillage n’est pas supprimé automatiquement une fois que vous vous êtes connecté avec succès. Cela est particulièrement courant lorsqu’un utilisateur abandonne la connexion en tapant CTRL-C avant de terminer l’invite.

Un autre problème relativement important concerne le nombre d’entrées OTPW valides restantes. Ceci est généralement géré par la ligne de session dans la configuration de PAM, mais actuellement, cela ne fonctionne pas correctement.

Pour résoudre ce problème, Wolfgang Kroener a écrit un script bash très simple qui implémente cette fonctionnalité dans la cette discussion sur la liste de diffusion Debian. Nous pouvons implémenter cela de différentes manières, mais le plus simple est de simplement l’ajouter à la fin de notre + ~ / .bashrc + pour les utilisateurs qui implémentent OTPW:

nano ~/.bashrc

Vers le bas, collez ceci:

if [ "$SSH_TTY" -a -f $HOME/.otpw ]; then
 PW_LINES=$(wc -l <$HOME/.otpw)
 PW_USED=$(grep -- ---- $HOME/.otpw | wc -l)
 echo "OTPW $PW_USED/`echo $PW_LINES-2 | bc` used"
fi

Vous pouvez également ajouter ceci à un emplacement plus centralisé. De cette façon, le résultat dépendra si le fichier + ~ / .otpw + existe pour chaque utilisateur.

Maintenant, lorsque vous vous connecterez, vous obtiendrez des statistiques sur vos derniers mots de passe:

OTPW 6/280 used

OTPW vous recommande de régénérer votre liste de mots de passe lorsque vous obtenez moins de 50% des mots de passe disponibles. Vous pouvez le faire en réexécutant la commande de génération:

otpw-gen > anotherfile.txt

Cela remplacera vos suffixes de mot de passe précédents, ils seront donc rendus inutilisables après cette procédure.

Conclusion

La configuration d’OTPW peut vous fournir une option pour vous connecter à votre serveur à partir d’un emplacement non sécurisé. Bien qu’il souffre de certains inconvénients des connexions par mot de passe habituelles, il fournit un moyen terme entre les connexions par clé, qui ne doivent jamais être transférées sur un ordinateur non sécurisé, et les connexions par mot de passe classiques, qui comportent de nombreuses failles et vulnérabilités.