[Tuto] PAM: OneTimePassword et USB authentication
OTP: Pratique
apt-get install libpam0g-dev wget http://www.cl.cam.ac.uk/~mgk25/download/otpw-1.3.tar.gz tar xzf otpw-1.3.tar.gz cd otpw make cp pam_otpw.so /lib/security chmod a-x /lib/security/pam_otpw.so |
Il faut maintenant générer une liste de password avec l'exécutable 'otpw-gen'.
Voyons ses options:
One-Time Password Generator v 1.2 -- Markus Kuhn ./otpw-gen [options] | lpr Options: -h <int> number of output lines (default 60) -w <int> max width of output lines (default 79) -s <int> number of output pages (default 1) -e <int> minimum entropy of each one-time password [bits] (low security: <30, default: 48, high security: >60) -p0 passwords from modified base64 encoding (default) -p1 passwords from English 4-letter words -f <filename> destination file for hashes (default: ~/.otpw) -d output debugging information |
Nous allons générer une liste de mots de passe de 5 mots de 4 lettres
./otpw-gen -e 50 -p1 Generating random seed ... If your paper password list is stolen, the thief should not gain access to your account with this information alone. Therefore, you need to memorize and enter below a prefix password. You will have to enter that each time directly before entering the one-time password (on the same line). When you log in, a 3-digit password number will be displayed. It identifies the one-time password on your list that you have to append to the prefix password. If another login to your account is in progress at the same time, several password numbers may be shown and all corresponding passwords have to be appended after the prefix password. Best generate a new password list when you have used up half of the old one. Enter new prefix password: |
Le préfixe est une sécurité de plus, il faut le retenir évidemment!
Enter new prefix password: plop Reenter prefix password: plop Creating '~/.otpw'. Generating new one-time passwords ... OTPW list generated 2008-03-14 10:43 on farwarx 000 quid sown woke zoom much 056 rick miss begs damn sobs 001 pier chan mack thee pure 057 mats raft nina loop doug 002 ross bump raid bcci peng 058 midi labs flop tide boil 003 ugly cleo stow lent fury 059 pulp utah apex bait ssap 004 lang lard hero wabi this 060 vans year done hang aces 005 shah pair baku beef gaol 061 cats uses fend trna ours 006 wade gent pick urgh sejm 062 vein time aged duke nunn 007 foil sees vote lina cite 063 tubs club dunn cave rick 008 semi tomb jane grab fear 064 buds bend only zzap sake 009 cook yuri lacy kath smug 065 glow week some ritz form 010 owls rest dumb quay nacl 066 arcs ercp tees nest legs 011 noun gulp burt move void 067 logo rees judi bent rein 012 free avid sued mass wick 068 sell crim pain jean ants ... 052 mite pods fran days shut 108 caro opec ears lets days 053 fete vera pick toad fins 109 norm anew dump pads begs 054 marr view mess parr rung 110 wary neil lays wigs last 055 owed tome nacl inns pass 111 axle lump bean lowe much !!! REMEMBER: Enter the PREFIX PASSWORD first !!! |
Il faut imprimer cette liste!!! Elle n'est conservée nulle part!!!
Configuration de 'Pam':
Je vais configurer 'Pam' sur la commande 'su' (qui permet le changement d'utilisateur).
Ceci pour tester le bon fonctionnement.
cd /etc/pam.d vim su # ajout à la fin apres les @includes: #j'ai commenté: #auth sufficient pam_rootok.so #la fonction 'pam_rootok' permet à l'utilisateur 'root' de changer #d'utilisateur sans demande de mot de passe. auth required pam_otpw.so session optional pam_otpw.so |
Que ce passe t-il donc maintenant si n'importe qui tape: 'su' ?
10:49 maxime@farwarx ~% su Mot de passe : mon-pawd-root Password 054: plopmarr view mess parr rung Remaining one-time passwords: 111 of 112 |
Il y a la demande du mot de passe de l'utilisateur choisis ('su' sans paramètre = 'su root') et ensuite une demande d'un mot de passe de la liste de 'otpw'.
Ici le numéro 54. Il faut donc écrire le préfixe suivis (sans espace) des 5 mots de 4 lettres avec des espaces entres eux.
Prefixe: "plop"
Password 54: "marr view mess parr rung"
Concaténation: "plopmarr view mess parr rung"
Un message annonce qu'il reste 111 sur 112 mots de passe.
Ce changement dans le fichier '/etc/pam.d/su' interdit désormais le changement d'utilisateur dans une console. La commande ne fonctionne plus que pour devenir' root'.
Au niveau de la sécurité, c'est un atout, car il faut un mot de passe, puis un préfixe, puis une liste de mot aléatoire (imprimé sur le mur et pas dans un fichier sur le pc).
On peut considérer que s'il y a un accès physique à un PC, ce PC n'a plus de sécurité.
Nous allons maintenant mettre en place 'otpw' sur le serveur SSH.
Pourquoi? Parce qu'au login, ça ne servirai qu'à sécurisé le login (hors un serveur Linux ne doit pas avoir de console loguée! et cf la phrase en gras/italique plus haut!).
SSH permet de se connecter à distance à un shell de manière "sécurisé" (du moins les connections sont cryptées) donc 'otpw' permettrai de renforcer la sécurité de cette connection (si il n'y a pas de certificats implentés de façon sécurisé, laissez tomber!.... mais là je parle pour un cas d'entreprise).
Cas de openssh-server:
vim /etc/pam.d/ssh # on rajoute à la fin: #OTPW Auth Method auth required pam_otpw.so session optional pam_otpw.so |
Puis on configure le serveur SSH pour qu'il autorise un mot de passe challenge!
vim /etc/ssh/sshd_config # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication yes |
Pour information, je vous donne quelques variables que j'ai dans mon fichier (qui pourraient poser problèmes):
UsePAM yes UsePrivilegeSeparation yes
Voilà, votre serveur SSH est accéssible à l'utiliateur 'root' avec une double sécurité:
password / otpw
Pour pouvoir se connecter avec des utilisateurs autres que 'root' (l'utilitée de 'otpw' est pour 'root' sur les serveurs), il faudra générer une autre liste de password par utilisateur. (je le déconseille)
Vous en savez plus sur One Time Password! Il faudra générer une nouvelle liste quand il ne restera plus beaucoup de mots de passe.
Si vous êtes un particulier, ça ne vous servira pas.... (à part si vous êtes parano ou si vous avez un 'home serveur').
Mais ne vous inquiétez pas, quelque chose d'interessant ce trouve après cette page!