Remplacer les mots de passe par l'insertion d'une clé USB

securite pam usb

Ou comment remplacer ce que l'on sait (le mot de passe) par ce que l'on possède (une clé USB particulière). Cela permet de donner une seconde vie à des clés USB totalement obsolètes de par leur taille vraiment faible (inférieure à 1Go).

Pamusb permet de se connecter sans avoir à taper un mot de passe. Pour cela un module PAM est ajouté et la sécurité repose sur la possession de cette fameuse clé. Bien que cela ne soit pas impossible, il est très difficile de remplacer cette clé, qui sera reconnue par son ID (iSerial) et qui possédera le même secret partagé que l'ordinateur. C'est cette dernière partie qui est très difficile à reproduire car le secret partagé est changé à chaque utilisation.

Pour obtenir ce numéro de série, on fait la différence de la commande lsusb avant et après l'insertion de la clé pour en déduire le numéro du bus et de device. Pour moi c'est ça

Bus 002 Device 007: ID 04e8:1623 Samsung Electronics Co., Ltd

J'interroge donc lsusb (en tant que superutilisateur root) sur ce périphérique et je vais comparer ce chiffre à celui que me proposera pam-usb lors de la configuration de ma clé USB.

sudo lsusb -s 002:007 -v | grep iSerial
iSerial 3 0123456789AB

L'installation de pam-usb est triviale

sudo dnf install pam_usb

On branche ensuite notre clé USB, si ce n'est pas déjà fait, (sans montage de partition) et on la déclare comme clé utilisable par pam-usb en lui donnant un nom

sudo pamusb-conf --add-device masterkey
Please select the device you wish to add.
* Using "Samsung Mighty Drive (0123456789AB)" (only option)

Which volume would you like to use for storing data ?
* Using "/dev/sdh1 (UUID: 99899601-c7de-4086-bc81-f2ff36a0b509)" (only option)

Name            : masterkey
Vendor          : Samsung
Model           : Mighty Drive
Serial          : 0123456789AB
UUID            : 99899601-c7de-4086-bc81-f2ff36a0b509

Save to /etc/pamusb.conf ?
[Y/n]

Impossible d'écrire dans le fichier /etc/pamusb.conf

Le fichier /etc/pamusb.conf par défaut comporte des commentaires multi-lignes.

Bien que cela soit valide d'un point de vue XML, pam-usb n'aime vraiment pas ça.

De plus la bonne indentation du fichier est le cadet de ses soucis.

Donc on écrit un fichier valide pour pam-usb et on s'occupera de l'indentation manuellement à la fin.

sudo mv/etc/pamusb.conf /etc/pamusb.conf.orig
sudo echo '<configuration><defaults></defaults><devices></devices><users></users><services></services></configuration>' > /etc/pamusb.conf

On ajoute notre utilisateur

sudo pamusb-conf --add-user tartarefr
Which device would you like to use for authentication ?
* Using "masterkey" (only option)

User            : tartarefr
Device          : masterkey

Save to /etc/pamusb.conf ?
[Y/n]

On modifie les fichiers /etc/pam.d/system-auth et /etc/pam.d/system-auth-ac pour ajouter la ligne autorisant l'authentification par le module pam-usb avant celle de l'authentification unix (ligne existante qui ne doit pas être modifiée)

Fichiers /etc/pam.d/system-auth et /etc/pam.d/system-auth-ac

auth        sufficient    pam_usb.so
auth        sufficient    pam_unix.so ....

On vérifie

pamusb-check tartarefr
* Authentication request for user "tartarefr" (pamusb-check)
* Device "masterkey" is connected (good).
* Performing one time pad verification...
* Access granted
sudo cat /etc/fedora-release
* pam_usb v0.5.0
* Authentication request for user "didier" (sudo)
* Device "masterkey" is connected (good).
* Performing one time pad verification...
* Access granted.
Fedora release 28 (Twenty Eight)

Au secours, ça ne fonctionne plus Il suffit de supprimer le répertoire local comportant le secret partagé (en se connectant avec le mot de passe unix). Le secret partagé sera réinitialisé avec la commande pamusb-check.

rm -rf ~/.pamusb
pamusb-check $USER

Article précédent Article suivant