Introduction

Les méthodes d'authentification courantes utilisent le schéma classique du mot de passe. Mais en fait, ce mécanisme est basé sur un objet qui permet de définir l'identité d'un utilisateur. Le mot de passe étant un élément connu de seul l'utilisateur, c'est un élément de preuve de l'identité de l'utilisateur.

Pourtant, il existe d'autres mécanismes de preuve. On peut utiliser plusieurs mots de passe, ou encore une réponse à une opération de chiffrement asymétrique. On peut également s'appuyer sur un objet que seul l'utilisateur possède. Une clef USB par exemple.

L'objectif de cet article est de présenter un mécanisme d'authentification par clef USB sous GNU/Linux.

Les concepts de pam_usb

Le module PAM pam_usb permet justement de réaliser cette authentification sous GNU/Linux et ce, de manière sécurisée. On peut penser qu'une simple clef USB est facile à contrefaire ce qui est juste.

Pam_usb identifie la clef USB selon plusieurs paramètres internes de l'appareil (vendor-id, product-id et le numéro de série). Mais nous sommes tous d'accord que ce n'est pas suffisant pour prouver que c'est bien la bonne clef usb. Il faut quelquechose en plus.

Ce quelquechose se nomme One-Time Pad ou Masque jetable en français. Il s'agit d'un algorithme et d'une méthode de chiffrement théoriquement incassable.

Dans la pratique, le one-time pad est un fichier qui est contenu sur la clef usb sous une forme chiffrée dans /.pamusb de la clef USB (ou de la partition de la clef que vous aurez choisie pour effectuer l'authentification). De même, l'autre partie du one-time pad est située dans le répertoire utilisateur (dans ~/.pamusb). Vu le fonctionnement de l'algorithme de chiffrement, même si on réplique complètement la clef, il suffira d'un seule authentification avec la clef originelle entre temps pour invalider la copie falsifiée.

Ainsi, l'algorithme one-time pad permet de rendre, grâce aux opération répétées d'authentification, une clef unique: c'est son contenu qui est changé à chaque authentification qui permet de la caractériser par rapport à des copies.

En ce qui concerne sa configuration, pam_usb utilise un simple fichier, nommé /etc/pamusb.conf. Néanmoins, ce fichier est au format XML ! Il faudra faire attention en l'éditant manuellement. Quelques outils, que nous verrons plus loin, permettent d'éviter ces erreurs de saisie.

Installation

Sous Debian Wheezy, l'installation est simple:

aptitude install libpam-usb

Le paquet libpam-usb contient uniquement le module PAM. Il dépend du paquet pamusb-common qui contient l'ensemble des applications utiles pour gérer des comptes via pamusb.

Il existe également un paquet pamusb-tools mais il ne contient rien. Donc, ne perdez pas de temps à l'installer.

Configuration simple

Je veux pouvoir m'authentifier avec mon compte nominatif à partir d'une clef USB. C'est le cas d'utilisation le plus simple à gérer avec pam_usb.

Voici ce que nous allons faire dans l'ordre:

  • Préparer la clef USB pour la rendre "compatible" avec pam_usb.
  • Ajouter une authentification avec un utilisateur simple
  • Configurer PAM pour utiliser pam_usb.

Pour préparer la clef USB, nous allons utiliser la commande pamusb-conf du paquet pamusb-common. Cette commande permet d'ajouter un périphérique USB ainsi que des utilisateurs. Comme nous allons ajouter notre clef USB, il faut bien entendu la brancher sur votre machine auparavant puis exécuter la commande suivante:

# pamusb-conf --add-device MA_CLEF
Please select the device you wish to add.
* Using "090c 1000 (B1211510002536)" (only option)

Which volume would you like to use for storing data ?
0) /dev/sdb2 (UUID: 753D-1A37)
1) /dev/sdb3 (UUID: 4cfe69b8-e5b1-4faa-a57a-73422c549b01)
2) /dev/sdb1 (UUID: <UNDEFINED>)

[0-2]: 0

Name    : MA_CLEF
Vendor    : 090c
Model       : 1000
Serial        : B1211510002536
UUID            : 753D-1A37

Save to /etc/pamusb.conf ?
Y/n] Y
Done.
# 

pamusb-conf prend en compte les réponses aux questions que vous donnez et modifie le fichier de configuration de pam_usb (/etc/pamusb.conf par défaut).

Maintenant que la clef est ajoutée, il reste à ajouter l'authentification pour un utilisateur simple:

# pamusb-conf --add-user mederic.ribreux
Which device would you like to use for authentication ?
* Using "MA_CLEF" (only option)

User          : mederic.ribreux
Device          : MA_CLEF

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

Nous venons d'ajouter l'utilisateur mederic.ribreux dans la configuration de pam_usb.

Maintenant, effectuons une vérification simple pour voir si tout fonctionne (avec la clef USB branchée). Nous allons utiliser la commande pamusb-check:

# pamusb-check mederic.ribreux
* Authentication request for user "mederic.ribreux" (pamusb-check)
* Device "MA_CLEF" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Access granted.
#

On voit que l'accès est bien autorisé. Il reste maintenant à configurer PAM pour prendre en compte le module pam_usb. C'est une opération assez facile. Il suffit de modifier le fichier /etc/pam.d/common-auth. Dans la pratique, l'installation du paquet debian a directement modifié ce fichier pour faire prendre en compte le module via la ligne ci dessous:

auth    sufficient      pam_usb.so
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass

On voit que la ligne concernant le module pam_usb.so est à un niveau sufficient. Ce dernier indique que si pam_usb réussi à authentifier l'utilisateur (parce que sa clef usb telle que configurée est présente et que l'algorithme de chiffrement a bien fonctionné), c'est suffisant pour considérer l'authentification comme valide.

On peut mettre cette option à required pour imposer l'utilisation de la clef USB pour se connecter. Bien entendu, si l'on perd la clef, on perd cette autorisation et on ne pourra pas se connecter.

Au final, je vous invite à consulter le fichier /etc/pamusb.conf. Il contiendra tout ce que vous venez de configurer avec pamusb-conf.

Aller plus loin avec pam_usb

Il existent d'autres fonctionnalités implémentées dans pam_usb. En effet, le paquet pamusb-common embarque une dernière commande assez intéressante qui se nomme pamusb-agent. Il s'agit d'un programme en tâche de fond qui lancera des commandes lors du retrait ou de l'insertion de votre clef USB.

On peut par exemple s'en servir pour verrouiller et dévérouiller son économiseur d'écran. Je vous laisse lire la partie de la documentation officielle sur pamusb-agent pour en savoir plus.

Conclusion

Pam_usb permet de s'authentifier de manière assez fiable et assez sécurisée sur une machine bien configurée pour ça. Toutefois, il reste quelques impératifs: vous devez nécessairement renseigner votre identifiant. Suivant votre "gestionnaire" de connexion, il faudra souvent taper votre identifiant (pour la console ou pour slim par exemple).

Pam_usb évite juste de taper le mot de passe. C'est bien mais ça entraîne également quelques effets de bord. En effet, certains modules PAM ont justement besoin d'un mot de passe. C'est le cas de pam_mount par exemple. Son utilisation sera donc incompatible avec pam_usb et c'est bien dommage...

Pour ma part, étant donné que j'utilise Slim et pam_mount et que, de surcroît, l'accès à un port USB sur ma station de travail n'est pas simple, je n'ai pas donné suite à l'utilisation de pam_usb.