S'identifier par une clé USB
Par thomas debay le 28/02/2006
Objectif
Permettre l'identification d'un utilisateur par une clé USB, en remplacement ou en complèment du mot de passe
Logiciels et matériel utilisés
Distribution : Debian, mais cela est normalement possible avec toutes... Logiciel : pam_usb, un module dédié à cette utilisation pour PAM. PAM est un méchanisme d'authentification intégré à beaucoup de distributions GNU/Linux. N'importe quelle clé USB reconnue sous Linux devrait convenir. La capacité nécessaire est infime : 1 Ko suffit pour un utilisateur, avec une clé DSA de 1024 bits !
Une bonne solution pour encore plus de sécurité est de partionner votre clé : vous pouvez créer une petite partition à la fin de la clé, d'environ 1 Mo (ce qui est largement suffisant pour stocker quelques clés, en thérories on pourrait en mettre 500 dans 1 Mo !) Ainsi, vos clés ne seront pas confondues avec le reste de vos données et il n'y a pas de risque de les effacer.
Installation du module
Il n'existe malheureusement pas (encore) de paquet pour Debian. Si vous utilisez une autre distribution, essayer de vérifier s'il n'existe pas un paquet, si vous êtes sous Debian, téléchargez les sources sur le site officiel : [1]
Sur une Debian les dépendances requises sont : libssl-dev, libreadline4-dev, libpam0g-dev, libpam-usb, que vous pouvez installer par apt-get.
Ensuite, il faut extraire les sources et lancer la compilation :
tar xvzf pam_usb-version.tar.gz
cd pam_usb_version
make
make install (en tant que root)
Et c'est tout, le module est normalement installé.
Préparation du système
Montage automatique de la clé
Il faut que votre clé soit montée automatiquement lorsque vous l'insérez, sinon, ca ne fonctionnera pas (encore que sur mon système cela à fonctionné sans monter la clé...) Il faut donc créer une ligne dans votre /etc/fstab qui ressemble à celle-ci :
/dev/sda1 /media/cle auto rw,user,auto 0 0
en remplacant /dev/sda1 par le périphérique qui correspond à votre clé, /media/cle par son point de montage, et auto par son système de fichiers (vous pouvez aussi laisser auto pour une détection automatique)
Pour plus de détails sur l'utilisation des clés USB vous pouvez consulter cet article Hardware-hard stock-cleusb
Génération des clés
Génération des clés
Il faut à présent générer la paire de clés publique/privée qui sera utilisée pour vous identifier. Dans une console tapez % usbadm keygen /media/cle login 2048 en remplacant /media/cle par le point de montage de votre clé et login par le nom d'utilsateur pour lequel vous voulez générer les clés. 2048 correspond à la taille de la clé, on estime que c'est suffisant, compte tenu de la puissance des ordinateurs actuels, pour une assez grande sécurité. Cependant, n'oubliez pas que n'importe quelle clé sera toujours "piratable". Vous obtenez [!] Generating 2048 DSA key pair for thomas@p3thomas [!] Extracting private key... [+] Private key extracted. [+] Private key successfully written. [!] Writing public key... [+] Public key successfully written.
Vos clés ont donc été générées dans un dossier caché nommé .auth de votre clé USB.
Il faut répéter cette opération pour tous les utilsateurs qui veulent utiliser leur clé pour s'identifier.
Facultatif : cryptage des clés
Pour plus de sécurité, il est possible de crypter les clés, par la commande % usbadm cipher /media/cle login il vous sera demandé l'algorythme à utiliser : [!] Importing the private key... [+] Private key imported [!] Encrypting the private key may prevent someone to authenticate with
your key. The drawback is that pam_usb will prompt you for password every time you authenticate.
[?] Which algorithm want you to use ? (none/des3/twofish):
Pour pouvoir protéger votre clé par une passphrase, il faut choisir des3.
Il vous sera demandé la passphrase, qu'il vous sera ensuite nécessaire de taper à chaque utilisation de la clé, c'est à dire à chaque identification.
Et votre clé est cryptée !
Paramètrage du système
Il ne reste plus qu'à modifier le comportement de PAM pour qu'il prenne en compte le module pam_sub. Trois cas (ou plus ?) sont possibles :
- Identification par clé USB uniquement. Aucun mot de passe (sauf la passphrase de la clé DSA si vous en avez une) ne sera requis
- Identification par clé et par mot de passe. Votre mot de passe sera comme avant demandé, mais si la clé USB n'est pas présente vous ne pourrez pas vous identifier. C'est la solution la plus sure, mais aussi la moin pratique.
- Identification par clé USB ou par mot de passe. L'un ou l'autre suffit.
Dans les trois cas tout se passera dans les fichiers du répertoire /etc/pam.d Pour utiliser cette méthode uniquement au moment du login, il faut modifier le fichier /etc/pam.d/login. Pour l'utiliser à toutes les identifications, il faut agir sur le fichier /etc/pam.d/common-auth
Identification par clé uniquement
Il faut modifier le fichier /etc/pam.d/common-auth comme suit : auth required usb_pam.so et commenter la ligne : auth required pam_unix.so nullok_secure
Identification par clé et mot de passe
Il faut comme précèdemment ajouter la ligne auth required usb_pam.so et laisser le reste du fichier tel quel.
Identification par clé ou par mot de passe
Ajouter la ligne au fichier /etc/pam.d/common-auth auth sufficient usb_pam.so
Faire les essais !
Normalement vous pouvez vous délogguer, et faire l'essai ! Dans un premier temps je vous conseille d'utiliser l'authentification par clé ou par mot de passe, car, si l'identification par clé ne fonctionne pas, vous pourrez toujours vous logguer avec votre mot de passe pour corriger ce qui ne vas pas.
Rattrapper les erreurs
Si par malheur vous avez modifié le fichier en mettant auth required pam_sub.so et que votre clé ne fonctionne plus, alors vous ne pouvez plus vous loogguer ! La solution consiste en booter sur un Live-CD, monter votre partition système, et modifier le fichier pour supprimer l'identification par clé.