L'idée ici est assez simple : utiliser la partition d'un clef usb pour s'authentifier sur un serveur grâce au plugin pam_usb. Ainsi, plus aucun mot de passe n'est demandé.
L'authentification sous Linux est aujourd'hui quasi-universellement confiée à PAM pour
En standard, PAM utilise surtout un seule plugin, pam_unix, qui va vérifier votre mot de passe dans /etc/shadow. Mais il est possible d'ajouter toute sorte de plugins pour enrichir la politique d'authentification. Par exemple
Les modules PAM sont situés en /lib/security et leur configuration en /etc/pam.d. Dans le cas d'une Mandriva, ce dossier contient un fichier par application utilisant PAM (imap, sshd, etc..) qui contient généralement des directives include permettant d'avoir un comportement commun par défaut, via le fichier system-auth. Les lignes qui nous intéressent ici sont celles qui régissent l'authentification et qui commencent par le mot clef auth:
Dans ce fragment, on s'aperçoit que l'authentification va d'abord se faire via le système classique d'UNIX (fichier /etc/shadow), puis, le cas échéant, via LDAP. Si aucun des deux n'as fonctionné, c'est pam_deny qui prends le relais et vous envois balader.
Le mot clef sufficient indique que si le module a correctement authentifié l'utilisateur, les modules suivants ne sont pas interrogés. Le mot clef required indique quant à lui que l'on doit passer par lui obligatoirement. Ainsi dans l'exemple précédent si nous avions remplacé (ne le faite pas !) les sufficient par des required, il faudrait pour qu'un utilisateur qui s'autentifie, soit présent dans /etc/shadow ET sur LDAP.
Première étape, préparer le clef usb. Soit vous utilisez une veille clef et vous la dédiez totalement, soit vous pouvez créer sur votre clef de travail une minuscule partition dédiée au stockage des clefs. Dans un cas comme dans l'autre la partition ne peut être formatté qu'en EXT3 ou REISER. Pas de FAT32 donc. C'est pour cela que sur ma clef de 1GO, j'ai formatté une première partition de 1GO-7Mo en FAT32 pour une utilisation classique, et une petite partition de 7Mo (j'ai pas réussi à faire moins) en EXT3 pour mes clefs. A 2ko la clef, cela en fait 3500, ce qui me semble suffisant
Pour créer et formatter la ou les partitions, je vous conseille d'utiliser drakdisk. Il vous faut donc supprimer les partitions existantes, en créez deux nouvelles en ne laissant que 1mo à la seconde. Puis enfin formatter la deuxième partition en EXT3 ou Reiser. La première partitions peut quant à elle être formattée selon vos goûts.
La clef formattée, nous allons donner un label à la seconde partition. Ce label va nous permettre de localiser la clef plus facilement par la suite et aussi, pour les unix modernes, va être utilisé lors d'une insertion comme nom pour le point de montage automatique. Pour changer le label d'une partition, allez voir par là. Tapez sync puis débranchez et rebranchez la clef pour être sur que tout va bien.
Pour la suite de ce tutorial, je part du principe que la partition a pour label usb-pass. Qu'elle est donc accessible via /dev/disk/by-label/usb-pass et qu'elle dispose d'un UUID proprement définit.
La solution adoptée par pam_usb est d'écrire une série de nombre aléatoire sur notre partition de 1Mo. A la connexion, cette série de chiffre (nommée pad) est comparée à celle qui a été copie dans le dossier utilisateur. Si ça colle, l'utilisateur est validé et pam_usb générée une nouvelle série de chiffres qui stock à nouveau sur la clef et dans le dossier utilisateur. Et ainsi de suite. Cette méthode garantie que toute donnée copies deviendra vite caduque à un détail près. En effet, si je débranche ma clef, que quelqu'un la copie, et se reconnecte avant moi, je suis grillé... La solution a donc ses limites qu'il est important de connaître.
La version 0.4.1 incluse dans la Mandriva 2008.0 était un peu buggée, il est plus sage de compiler soit même la dernière version du module. Il faut pour cela aller sur le site de pam_usb pour télécharger le dernier tarball (pam_usb-0.4.2.tar.gz) et le compiler :
Ceci fait, branchez votre clef USB, et lancez la commande suivante. Il va vous être demandé de choisir parmi les partitions de clef usb présente sur le système celle qui contiendra les données d'authentification. Choisissez la petite partition pass-usb. Tapez enfin Y pour sauver ces informations dans le fichier de configuration /etc/pamusb.conf.
Ensuite nous allons ajouter un utilisateur authentifiable sur la clef. Pour cela utilisez la commande suivante en indiquant en paramètre l'utilisateur à rajouter.
Voilà, c'est terminé. Il suffit maintenant d'ajouter dans /etc/pam.d/system-auth la ligne indiquant à PAM que la clef USB est le premier moyen suffisant pour s'authentifier sur ce système :
Il ne reste maintenant plus qu'à tester. Une fois que tout est bon, vous pouvez rendre pam_usb moins bavard en modifiant /etc/pamusb.conf comme suite :
- répondre
Spami , le 18 August, 2007 - 20:34C'est un exellent tuto !
Mais il ne faut égarer sa clef USB dans ce cas
- répondre
Ulhume, le 18 August, 2007 - 23:05Merci
Bah sinon, il y a toujours le mot de passe qui continue à fonctionner;-) Le seul truc, c'est qu'à la longue on oublie le fameux mot de passe ...
- répondre
djib , le 8 November, 2007 - 13:52Intéressant et plutôt cool !
- répondre
Juke , le 8 November, 2007 - 14:11Salut
Est t'il possible de ne pas avoir à taper le login.
Genre je suis sur gdm, quand je branche ma clé, il se loggue automatiquement avec l'utilisateur correspondant.
A+
Julien
- répondre
Ulhume, le 8 November, 2007 - 15:08@Juke pas directement non, mais cela doit être jouable en modifiant l'agent (les sources).
- répondre
Dup , le 8 November, 2007 - 21:50Ce qui pourrait être drôle c'est de configurer l'accès pour root, et d'activer le support de pam_usb dans le fichier /etc/pam.d/sshd
- répondre
Ulhume, le 9 November, 2007 - 00:33@Dup LOL
Petit malin, rassures toi j'y avais déjà pensé, et chose étrange, si tu fais cela, ssh ne répond plus. Quel que soit l'accès d'ailleurs. Je ne sais pas si c'est fait exprès mais si tu tentes un ssh sur une machine où la clef est branchée, ça t'envoie bouler 
- répondre
dup , le 9 November, 2007 - 08:23Ah oui tiens je me demande pourquoi ca ne marche pas, ce pourrait-il que le client recherche la clé usb sur le poste initiant la connexion plutôt que le serveur, ce qui me paraît bizarre ? En tous cas je vois je ne suis pas le seul à y avoir pensé.
- répondre
Ulhume, le 9 November, 2007 - 09:06@dup ben tu sais, dés qu'il y a une conneries à faire
Plus sérieusement je viens de refaire le test avec la dernière version (le coup de l'erreur c'était avec la 0.4.1). Maintenant lorsque je tente une connexion à partir d'une machine distante sur une machine avec pamusb configurée et une clef insérée, le système me demande malgrès tout mon mot de passe. Donc le cas est prévu (heureusement tu me diras
et l'erreur devrait être une mauvaise gestion du fallback(pamusb/shadow) dans le même cas de figure.
Donc ça va, c'est safe
- répondre
Dup , le 9 November, 2007 - 17:51Bon ca me rassure alors
Il est vrai que j'ai entendu dire que la version 4.1 est buggé.
- répondre
Ulhume, le 10 November, 2007 - 06:55C'est un fait, il avait au moins deux bugs, celui-là et une erreur bien casse pied de reconnaissance de partitions, les deux sont réglés à l'évidence.
Poster un nouveau commentaire