Skip to content


Authentification par clef USB

Introduction :

L'authentification est un sujet qui ne sera jamais clos ou considéré comme absolument connu. En effet comment être sûr que celui ou celle qui entre les identifiants est légitimement détenteur ou détentrice de ceux-ci ?
Un coffre est souvent sécurisé par un code et une clé !

Afin d'augmenter le niveau de sécurité, nous allons voir comment mettre en place une authentification par login/mot de passe et la possession d'une clé USB particulière.

 

Pré-requis :

Il faut installer pamusb-tools libpam-usb et avoir une clé USB reconnue par pamusb-tools

# apt-get install pamusb-tools libpam-usb

Nous allons aussi installer un petit outil supplémentaire afin de générer des UUID : uuid-runtime

# apt-get install uuid-runtime

 

Configuration et paramétrage de la clé :

Nous voulons que personne ne puisse devenir "root" sans la clé prévue à cet effet, préalablement paramétrée. Dans ce cadre nous voulons le comportement suivant :

- Sans la clé

lolo [ ~ ]$ su
* pam_usb v0.4.2 * Authentication request for user "root" (su)
* Device "clef" is not connected.
* Access denied.
Mot de passe :
su : Échec d'authentification
lolo [ ~ ]$

- Avec la clé :

lolo [ ~ ]$ su
* pam_usb v0.4.2
* Authentication request for user "root" (su)
* Device "clef" is connected (good).
* Performing one time pad verification...
* Probing volume (this could take a while)...
* Regenerating new pads...
* Access granted.
Mot de passe :
root@debian:/home/lolo#

 

La clé est une Fish Bank de 2Go :

Model: ChipsBnk Flash Disk (scsi)
Disk /dev/sdd: 2080MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 6291kB 5243kB primary ext3
2 6291kB 2080MB 2074MB primary fat32

 

Nous allons générer un UUID pour la partition 1 c'est à dire celle en "ext3"

# uuidgen
2d979f96-0f79-4f25-a92f-dfdff8c90efd

Cet UUID nous allons l'attribuer à la partition 1:

root@debian:/etc# tune2fs -U "2d979f96-0f79-4f25-a92f-dfdff8c90efd" /dev/sdd1
tune2fs 1.41.12 (17-May-2010)
root@debian:/etc#

Noua allons ensuite donner un nom particulier à cette clé pour la différencier des autres, ce qui aura pour effet de modifier /etc/pmausb.conf :

root@debian:/etc# pamusb-conf --add-device MaCle
Please select the device you wish to add.
* Using "ChipsBnk Flash Disk (ChipsBnk_Flash_Disk-0:0)" (only option)
Which volume would you like to use for storing data ?
0) /dev/sdd2 (UUID: 42EC-3509)
1) /dev/sdd1 (UUID: 2d979f96-0f79-4f25-a92f-dfdff8c90efd)
[0-1]: 1
Name : MaCle
Vendor : ChipsBnk
Model : Flash Disk
Serial : ChipsBnk_Flash_Disk-0:0
UUID : 2d979f96-0f79-4f25-a92f-dfdff8c90efd
Save to /etc/pamusb.conf ?
[Y/n] Y
Done.
root@debian:/etc#

Nous allons en suite indiquer que l'utilisateur est associé à cette clé :

root@debian:/etc# pamusb-conf --add-user root
Which device would you like to use for authentication ?
* Using "MaCle" (only option)
User : root
Device : MaCle
Save to /etc/pamusb.conf ?
[Y/n] Y
Done.
root@debian:/etc#

Paramétrage de l'authentification PAM :

À cet effet nous devons éditer et modifier /etc/pam.d/common-auth en ajoutant la ligne en rouge ainsi :

auth required pam_usb.so
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
auth optional pam_ecryptfs.so unwrap

Si vous voulez que la clé soit optionnelle, il faut mettre "sufficient" à la place de "required" sur la ligne précédemment citée.

Voici une sortie type debug de /var/log/auth.log :

Mar 20 12:38:39 debian pam_usb[3262]: pam_usb v0.4.2
Mar 20 12:38:39 debian pam_usb[3262]: Authentication request for user "root" (su)
Mar 20 12:38:39 debian pam_usb[3262]: Checking whether the caller is local or not...
Mar 20 12:38:39 debian pam_usb[3262]: Authentication request from tty pts/5
Mar 20 12:38:39 debian pam_usb[3262]: Caller is local (good)
Mar 20 12:38:39 debian pam_usb[3262]: Connecting to HAL...
Mar 20 12:38:39 debian pam_usb[3262]: Searching for "MaCle" in the hardware database...
Mar 20 12:38:39 debian pam_usb[3262]: Device "MaCle" is connected (good).
Mar 20 12:38:39 debian pam_usb[3262]: Performing one time pad verification...
Mar 20 12:38:39 debian pam_usb[3262]: Searching for volume with uuid 2d979f96-0f79-4f25-a92f-dfdff8c90efd
Mar 20 12:38:39 debian pam_usb[3262]: Found volume 2d979f96-0f79-4f25-a92f-dfdff8c90efd
Mar 20 12:38:39 debian pam_usb[3262]: Attempting to mount device /dev/sde1 with label pam_usb3262
Mar 20 12:38:39 debian pam_usb[3262]: Executing "pmount -A -s -t ext3 /dev/sde1 pam_usb3262"
Mar 20 12:38:39 debian pam_usb[3262]: Mount succeeded.
Mar 20 12:38:39 debian pam_usb[3262]: Loading device pad...
Mar 20 12:38:39 debian pam_usb[3262]: Loading system pad...
Mar 20 12:38:39 debian pam_usb[3262]: Pad match.
Mar 20 12:38:39 debian pam_usb[3262]: Checking whether pads are expired or not...
Mar 20 12:38:39 debian pam_usb[3262]: Pads were generated 131 seconds ago, not updating.
Mar 20 12:38:39 debian pam_usb[3262]: Attempting to umount /media/pam_usb3262
Mar 20 12:38:39 debian pam_usb[3262]: Executing "pumount /media/pam_usb3262"
Mar 20 12:38:39 debian pam_usb[3262]: Umount succeeded.
Mar 20 12:38:39 debian pam_usb[3262]: Access granted.
Mar 20 12:38:48 debian su[3262]: pam_sm_authenticate: Called
Mar 20 12:38:48 debian su[3262]: pam_sm_authenticate: username = [root]
Mar 20 12:38:48 debian su[3262]: Successful su for root by lolo
Mar 20 12:38:48 debian su[3262]: + /dev/pts/5 lolo:root
Mar 20 12:38:48 debian su[3262]: pam_unix(su:session): session opened for user root by lolo(uid=1000)

Cette sortie est importante car elle montre le mécanisme mis en oeuvre par libpam-usb et pamusb-tools.

Celui qui s'authentifie voit ceci :

lolo [ ~ ]$ su
* pam_usb v0.4.2
* Authentication request for user "root" (su)
[src/local.c:032] Checking whether the caller is local or not...
[src/local.c:041] Authentication request from tty pts/5
[src/local.c:060] Caller is local (good)
[src/device.c:068] Connecting to HAL...
[src/device.c:033] Searching for "MaCle" in the hardware database...
* Device "MaCle" is connected (good).
* Performing one time pad verification...
[src/volume.c:087] Searching for volume with uuid 2d979f96-0f79-4f25-a92f-dfdff8c90efd
[src/volume.c:119] Found volume 2d979f96-0f79-4f25-a92f-dfdff8c90efd
[src/volume.c:048] Attempting to mount device /dev/sde1 with label pam_usb3438
[src/volume.c:055] Executing "pmount -A -s -t ext3 /dev/sde1 pam_usb3438"
[src/volume.c:071] Mount succeeded.
[src/pad.c:239] Loading device pad...
[src/pad.c:241] Loading system pad...
[src/pad.c:247] Pad match.
[src/pad.c:145] Checking whether pads are expired or not...
[src/pad.c:175] Pads were generated 550 seconds ago, not updating.
[src/volume.c:143] Attempting to umount /media/pam_usb3438
[src/volume.c:145] Executing "pumount /media/pam_usb3438"
[src/volume.c:147] Umount succeeded.
* Access granted.
Mot de passe :
root@debian:/home/lolo#

Pourquoi en pré-requis avoir parlé de clé reconnue par pamusb-tools ?

Voici ce qui arrive avec une clé non reconnue :

root@debian:/etc/pam.d# uuidgen 
97aae236-35de-4334-a3ae-b9a530b20487

root@debian:/etc/pam.d# tune2fs -U "97aae236-35de-4334-a3ae-b9a530b20487" /dev/sdd2
tune2fs 1.41.12 (17-May-2010)

root@debian:/etc/pam.d# pamusb-conf --add-device MaCle --verbose
Inspecting /org/freedesktop/Hal/devices/storage_serial_USB_Flash_Disk_AA04012700094778_0_0
 Invalid: Not a removable device
Inspecting /org/freedesktop/Hal/devices/storage_model_DVD_ROM_TS_H352A
Invalid: 'storage.serial'
Inspecting /org/freedesktop/Hal/devices/storage_model_CD_DVDW_SH_W162C
Invalid: 'storage.serial'
Inspecting /org/freedesktop/Hal/devices/storage_serial_Maxtor_6E040L0_E12R357N
Invalid: Not a removable device
Inspecting /org/freedesktop/Hal/devices/storage_serial_MAXTOR_STM3160815AS_6RAD0GWB
Invalid: Not a removable device
Inspecting /org/freedesktop/Hal/devices/storage_serial_MAXTOR_STM3320613AS_9SZ2LMS4
Invalid: Not a removable device
No devices detected.
root@debian:/etc/pam.d#

La clé n'est pas vue comme un périphérique enfichable !!!? 🙁

Une fois /etc/pmausb.conf correctement paramétré avec la clé enfichée, voici ce qui se passe :

lolo [ ~ ]$ su
* pam_usb v0.4.2
* Authentication request for user "root" (su)
* Device "clef" is connected (good).
* Performing one time pad verification...
* Probing volume (this could take a while)...
* Regenerating new pads...
* Access granted.
Mot de passe :
root@debian:/home/lolo#

Conclusion :

Voilà un tuto simple à la condition d'avoir une clé reconnue...

Vérifiez enfin que vous ayez une session de démarrage type "safe" en mode "root" au cas où !

Vous voilà en possession de la clé ouvrant l'accès "root" sur votre machine... Ne la perdez pas ! 🙂

 

- Fin -

Print Friendly, PDF & Email

Posted in Debian, Important, Linux, Mandriva, Technique, Toutes. Tagged with , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.