Installation, configuration, et utilisation du module pam_usb



Charles-Antoine Guillat-Guignard
xarli@xarli.net
http://www.xarli.net

Copyright 2005 Charles-Antoine Guillat-Guignard


La dernière version de ce document est disponible sur ce site : http://contrib.xarli.net/pam_usb/




Copyright (c) 2005 Charles-Antoine Guillat-Guignard.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

Qu'est ce que pam_usb?


pam_usb est un projet visant à créer un module PAM d'authentification basé sur des paires de clés sur un peripherique USB, ou autre d'ailleurs (il est possible d'utiliser par exemple une disquette ou un CDROM). Le site web du projet est http://www.pamusb.org/ [EN]. Cela permet d'avoir à faible coût un moyen d'authentification physique sécurisé.


Ce tutoriel est très largement inspiré des deux pages de documentation officielle présente sur le site du projet, dans la langue de Molière toutefois. N'hesitez pas a me soumettre toute correction technique, orhtographique ou grammaticale.



Compilation et installation


Il vous faudra d'abord récupérer les sources de ce module dans la section téléchargement du projet sur SourceForge.net [EN]. A a date d'écriture de ce tutoriel, le fichier à télécharger est pam_usb-0.3.1.tar.gz, à savoir la version 0.3.1 du module. Déplacez le dans /usr/local/src, et décompressez le :

23:10 root@iguzki /usr/local/src# tar xvfz pam_usb-0.3.1.tar.gz

Puis déplacez vous dans le répertoire des sources, compilez le module, et installez le :.

23:10 root@iguzki /usr/local/src# cd pam_usb-0.3.1
23:10 root@iguzki /usr/local/src/pam_usb-0.3.1# make
23:10 root@iguzki /usr/local/src/pam_usb-0.3.1# make install

Voilà, vous n'avez plus qu'à générer une paire de clé, et à configurer PAM.



Quelles sont les méthodes d'authentification possibles?


On va ensuite configurer la méthode d'authentification désirée. Pour cela, nous allons modifier le fichier désiré, dans le répertoire /etc/pam.d/. Au choix, vous pourrez modifier le fichier login pour votre authentification sur une console locale, ou bien xdm pour une authentification par le gestionnaire graphique de connexion.

Trois méthodes sont disponibles, à vous de choisir, elle sont relativement explicites je pense :

Le module pam_unix.so peut avoir différents noms selon votre distribution GNU/Linux, pour plus d'information sur PAM, référez vous à la documentation officielle de PAM [EN], ou bien à la documentation de votre distribution favorite.


Attention, les methodes "alternative et unique" posent evidemment de gros problemes de securite en cas de perte de votre cle USB, disquette ou CDROM.



Options


Pour configurer le module, il est possible de rajouter des options a la fin de la ligne contenant pam_usb.so, dans le fichier de configuration utilise dans le repertoire /etc/pam.d/. Voila une liste des options prises en compte :


NomTypeDescriptionValeur par defaut
mntpoint chaine de caracteres Point de montage temporaire, pour verification des cles privees. XXXXXX (une serie de 6 X) sera remplacee par une valeur temporaire. /tmp/pam_usbXXXXXX
proc_basename chaine de caracteres Le nom et l'emplacement du peripherique dans le procfs. En general, la valeur par defaut est juste, pas besoin de modifier cela. /proc/scsi/usb-storage-%d/%d
pwfile chaine de caracteres Le chemin ou pam_usb va chercher les cles publiques (sous mountpoint/) et privees (sous ~utilisateur/). La valeur par defaut correspond a celle utilisee lors de la generation. /.auth/
pubkey chaine de caracteres Le nom du fichier contenant la cle publique. La valeur par defaut correspond a celle utilisee lors de la generation. id_pub
snfile chaine de caracteres Le fichier contenant les numeros de serie autorises. S'il est inexistant, alors n'importe quel numero de serie sera autorise. /etc/pam_usb/serials.conf
fs chaine de caracteres Liste des systemes de fichiers utilises pour monter le peripherique, separes par des virgules. ext2,vfat
utmp chaine de caracteres Emplacement du fichier utmp. /var/run/utmp
mount_opts chaine de caracteres Options de montage du peripherique (bind, sync, ro, ...), separes par une virgule. man mount vous permettra de voir une liste tres fournie des options disponibles.
log_file chaine de caracteres Fichier de journalisation utilise par pam_usb, pour stocker les sorties. Si aucun n'est specifie, alors les sorties ont lieu sur la sortie standard, ce qui provoque des connexions verbeuses en console.
local_consoles chaine de caracteres Liste des consoles separees par des virgules auquelles il est possible de se connecter, quand allow_remote est positionne a faux. /dev/vc/,/dev/tty,:
direct_open booleen Tentative d'ouverture de la cle privee en utilisant O_DIRECT, ce qui permet d'outrepasser le cache disque. Ne fonctionne correctement qu'avec les peripheriques supportant ce mode d'acces.
local_hosts chaine de caracteres Liste des hotes autorises a se connecter quand allow_remote est positionne a faux, les hotes doivent etre separes par une virgule. :
force_device chaine de caracteres Il est possible de forcer un peripherique avec cette option, il faut utiliser le nom et l'emplacement du peripherique, /dev/sda1 par exemple. Si l'ouverture de ce periferique echoue, alors pam_usb tente en auto-detection. Cette option permet egalement d'utiliser d'autres peripheriques qu'une cle USB, une disquette (/dev/fd0 par exemple), un CDROM (/dev/cdrom par exemple).
allow_remote booleen Positionne a faux, pam_usb va permettre seulement aux hotes local_hosts et local_consoles de se connecter. faux
check_device booleen Si cette option est positionnee a faux, alors pam_usb ne va pas verifier si le peripherique est attache, ni si le numero de serie est autorise. vrai
check_if_mounted booleen Si positionne a vrai, alors pam_usb va verifier si le peripherique est deja monte et si c'est le cas, il va utiliser le point de montage actuel au lieu de mntpoint (les auteurs du projet deconseillent l'utilisation de cette option, mais je ne comprend personnellement pas pourquoi). faux
keep_mounted booleen Si le peripherique est deja monte, alors pam_usb ne va pas demonter celui-ci apres ses verifications. Utile utilise en combinaison avec check_if_mounted. faux
sign_times entier Nombre de fois que pam_usb va effectuer le challenge de verification. 3
debug booleen Activation du mode de deboggage. Attention, en cas d'utilisation de cette option, mieux vaut specifier log_file. faux

Les option booleennes peuvent etre placees a vrai juste en les specifiant, et a faux en les faisant preceder avec un point d'exclamation.

Les options prenant des valeurs entieres ou des chaines de caractere s'utilise en specifiant le nom de l'option suivi d'un signe egal et de la valeur desiree.

Voila par exemple la ligne specifiee dans /etc/pam.d/login sur mon portable professionnel par exemple :

auth sufficient pam_usb.so !check_device check_if_mounted fs=reiserfs,ext3 log_file=/var/log/pam_usb.log keep_mounted debug force_device=/dev/sda1

Une petite explication s'impose a propos de cet exemple. Une validation par pam_usb est suffisant pour se connecter au systeme, donc mode d'authetification alternatif, pas de verification du numero de serie, verification du montage du peripherique et utilisation du point de montage si c'est le cas, systemes de fichiers autorises reiserfs puis ext3. Journalisation des sorties de pam_usb dans le fichier /var/log/pam_usb.log, pas de demontage si le peripherique est deja monte, activation du mode verbeux, forcement du peripherique /dev/sda1 (ma cle USB, reconnue comme premier peripherique SCSI par le module USB_MASS_STORAGE, et sur lequel la premiere partition contient mes cles privees).



Génération de paires de clés


On va pouvoir alors générer une clé publique, destiné à être placée sur la machine sur laquelle on veut s'authentifier, et une clé privée correspondante destinée à être placée sur la clé USB. On va utiliser l'utilitaire usbadm pour réaliser cette génération.

Si on ne l'a jamais fait auparavent, on va créer un point de montage pour celle-ci, et la monter (on va stocker la clé privée sur la première partition de la clé, celle-ci étant reconnue comme /dev/sda1) :

23:10 root@iguzki ~# mkdir /mnt/usb
23:10 root@iguzki ~# mount /dev/sda1 /mnt/usb

La syntaxe de l'utilitaire est la suivante : usbadm keygen <point de montage> <utilisateur> <bits>. On va créer une paire de clé pour l'utilisateur root, de 2048 bits :

23:10 root@iguzki ~# usbadm keygen /mnt/usb root 2048
[!] Directory /root/.auth/ not found, creating one...
[!] Directory /mnt/usb/.auth/ not found, creating one...
[!] Generating 2048 DSA key pair for root@host
[!] Extracting private key...
[+] Private key extracted.
[+] Private key successfully written.
[!] Writing public key...
[+] Public key successfully written.

Ca y est, vous pouvez vous logguer en tant que super-utilisateur sur cette machine, en vous contentant de brancher votre clé USB, et en indiquant root comme identifiant, si vous avez choisi la méthode unique ou alternative.

Repetez l'appel a cette commande pour generer d'autres paires de cle, par exemple pour un autre utilisateur sur la meme machine, ce qui permettra a deux utilisateurs differents de se logguer par ce biais avec la meme cle USB.






XHTML 1.0 transitionnel valide!
CSS valide!
Propulsé par Apache!
Propulsé par Debian Gnu/Linux!
Fait avec VI