14/04/2011

Yubikey : la petite clé qui assure

Utilisation simple

De base, nous utiliserons les services de validation de Yubico. Il s’agit ici de configurer simplement Linux pour identifier un utilisateur en utilisant sa clé.

Application n°1 : login Linux

Tout bon Linux moderne utilise en général Linux-PAM pour tout ce qui touche à l’identification utilisateur. Et comme Yubico a la bonne idée de proposer un module PAM, c’est ce que nous allons utiliser.

Il y a trois dépôts à aller chercher pour construire notre module PAM : celui de la bibliothèque yubico-c-client, celui de l’outil de configurationyubikey-personalization, et enfin yubico-pam lui-même. Pour la suite, je suppose que vous avez déjà git d’installé, en sus des outils habituels (automake, gcc …), et que vous savez aller installer une dépendance manquante (comme curl) au besoin.

Compilations

On commence par compiler la bilbiothèque client.

[smokey@moira yubi]$ git clone https://github.com/Yubico/yubico-c-client
Cloning into yubico-c-client...
remote: Counting objects: 397, done.
remote: Compressing objects: 100% (194/194), done.
remote: Total 397 (delta 233), reused 319 (delta 201)
Receiving objects: 100% (397/397), 94.17 KiB, done.
Resolving deltas: 100% (233/233), done.
[smokey@moira yubi]$ cd yubico-c-client/
[smokey@moira yubico-c-client]$ autoreconf --install
[smokey@moira yubico-c-client]$ ./configure
[smokey@moira yubico-c-client]$ sudo make install
[smokey@moira yubico-c-client]$

Rien que du très classique. La bibliothèque est installée comme il se doit dans /usr/local/lib. Je vous laisse d’ailleurs faire exactement la même chose avec yubikey-personalization dans un répertoire à côté, vous êtes grands après tout.

On peut maintenant répéter l’opération avec yubico-pam, à une astuce près : la dépendance ykpers-1 (yubikey-personalization) a été ajoutée très récemment et se vérifie via pkg-config. Il faut donc indiquer à ce dernier où trouver le fichier .pc qui va bien via la variable d’environnement PKG_CONFIG_PATH. Ce qui donne :

[smokey@moira yubico-pam]$ cd ..
[smokey@moira yubi]$ git clone https://github.com/Yubico/yubico-pam
[smokey@moira yubi]$ cd yubico-pam/
[smokey@moira yubico-pam]$ autoreconf --install
[smokey@moira yubico-pam]$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig ./configure
[smokey@moira yubico-pam]$ sudo make install
[smokey@moira yubico-pam]$

Le module est installé dans /usr/local/lib/security. Pour que PAM puisse l’utiliser, il faut le mettre au bon endroit (et donc être root) :

# mv /usr/local/lib/security/pam_yubico.so /lib/security/
Configuration de PAM

Il faut maintenant indiquer à PAM que l’on veut pouvoir utiliser l’OTP de la Yubikey. Pour ce faire, on modifie /etc/pam.d/login pour y faire ajouter la ligne suivante :

auth            sufficient      pam_yubico.so id=16

Attention : si vous n’êtes pas très familiers avec PAM, sachez qu’il faut ajouter cette ligne au bon endroit. Je vous recommande de la mettre juste au-dessus de celle du module pam_unix.so. Si vous la placez trop haut, étant donné que le module est ici sufficient (suffisant), il shuntera les modules auth suivants, même s’ils sont required (requis) : pam_securetty ou pam_nologin seraient par exemple rendus inefficaces, ce qui PEUT être grave OU PAS. À vous de voir 🙂

Variantes possibles :

  • avec debug (conseillé en cas de souci)
    auth  sufficient  pam_yubico.so id=16 debug
  • avec gestion centralisée des identités
    auth  sufficient  pam_yubico.so id=16 authfile=<chemin absolu>

Note : pour observer les messages de debug, il suffit de créer le fichier /var/run/pam-debug.log et de le rendre inscriptible à tous.

Pour finir, il faut renseigner le système sur l’identité des yubikeys des utilisateurs. Il y a deux façons de le faire :

  • individuellement : il faut alors créer ~/.yubico/authorized_yubikeys pour chaque utilisateur ;
  • globalement : le fichier peut se trouver n’importe où, du moment que le chemin correspond à celui passé à authfile= ci-dessus évidemment.

Dans les deux cas, le format du fichier est :

<login>:<yubi ID1>:<yubi ID2>...

Pour le fichier global, ayez soin d’utiliser une ligne par enregistrement utilisateur. L’ID de chaque Yubikey peut facilement être récupéré en prenant les 12 premiers caractères de n’importe quel OTP généré.

Si tout s’est bien passé, au prochain login, vous devriez voir quelque chose dans ce genre :

yubikey login

Login console avec la Yubikey
On effleure la clé, et c'est gagné 🙂

Application n°2 : authentification à 2 facteurs avec SSH

L’authentification à 2 facteurs est basée, comme son nom l’indique, sur deux moyens d’authentification différents. Ici, nous sommes dans le cas typique de “ce que l’on connaît” (un mot de passe classique) combiné avec “ce que l’on détient” (la Yubikey). Les deux seront combinés pour former un mot de passe hybride, que l’on va charger pam_yupico de valider. En image, ça donne ça :

Yubikey 2 Factor

Fonctionnement de l'authentification à 2 facteurs avec SHS et PAM

La marche à suivre est sensiblement la même que précédemment, sauf bien entendu pour ce qui est de la configuration de PAM. Ici, on va s’intéresser logiquement à /etc/pam.d/sshd. Tout d’abord, on y ajoute la ligne suivante :

auth       required     pam_yubico.so id=16

Par rapport à tout-à-l’heure, l’utilisation de la Yubikey est ici requise au lieu d’être suffisante. Du coup, on ne risque plus de shunter d’autre modules, mais il faut tout de même placer cette ligne AVANT celle de pam_unix.so.

Ensuite, il faut modifier les paramètres du module pam_unix.so. Celui-ci peut être configuré directement dans /etc/pam.d/sshd (ex. Archlinux), ou être appelé par un @include pointant sur /etc/pam.d/system-auth (ex. Gentoo) ou /etc/pam.d/common-auth (ex. Debian) : à vous d’adapter en fonction de ce que vous avez sous les yeux. L’important est d’ajouter l’option try_first_pass, de façon à ce que la ligne ressemble à ceci :

auth       required     pam_unix.so try_first_pass nullok

Une fois ces modifications faites, il ne reste plus qu’à vous connecter à la machine distante comme d’habitude ; mais au lieu de taper simplement Entrée pour valider le mot de passe, on va rajouter l’OTP de la Yubikey. En d’autres termes, au lieu de faire mot_de_passe+Entrée, on fait mot_de_passe+toucher_la_yubikey.

Et ça marche ! Sauf si bien sûr vous avez oublié de préciser PasswordAuthentication yes dans votre /etc/ssh/sshd_config … c’était pour voir si vous suiviez 😉

yubikey en ssh

Login SSH. Par défaut, SSH propose d'utiliser la clé publique s'il en trouve une : taper entrée pour passer à l'étape suivante.

  1. | #1

    Hey smokey, on peut se la procurer ou cette clée ?
    J’en veux une moi !

  2. LeCoyote
    | #2

    Sur le site de Yubico 🙂 Le mieux serait d’organiser une commande groupée, ça reviendrait un poil moins cher à tout le monde …

  3. | #3

    +1 pour la commande groupée !
    J’en suis !

  4. | #4

    Yop,

    Dis-moi, tu ne serais pas par hasard passé aux journées FedeRez toi? 🙂

    Sinon, pour ceux qui sont intéressés, j’ai donné quelques détails sur mon site à propos du verrouillage de poste avec Yubikey que j’avais présenté à cette occasion (url en trackback si je comprend comment ça marche!)

  5. okhin
    | #5

    Need!!! Il m’en faut une aussi

  6. Cosaque
    | #6

    Je suis intéresse par au moins 1 yubikey également !

  7. LeCoyote
    | #7

    Ah pas du tout non 🙂 J’ai cette petite clé depuis un bon moment, je voulais juste faire un petit retour d’expérience.
    J’aime bien l’idée d’utiliser la clé pour déverrouiller le poste en tout cas 🙂

  8. neuronne-1337
    | #8

    +3 pour moi.

  9. LeCoyote
    | #9

    Et je lance une commande 🙂

  10. | #10

    Hey !!

    Moi aussi j’en veut une !!!
    J’espère que la commande n’est pas déjà partie !!

    pour un p’tit jour de retard :s

  11. LeCoyote
    | #11

    J’ai fait une commande de 20 clés, on verra ce qui reste 😉

  12. LeCoyote
    | #12

    Ayé ! Je suis en possession des 20 clés 🙂 Rendez-vous sur http://piratepad.net/TGr2tWSBLQ pour l’état des “commandes” et pour discuter d’un mode de livraison qui va bien

  13. zda
    | #13

    Bref, toujours aussi marrant de voir des gens aussi sûr (ou presque).

    Non sincérement, ou ce trouve la preuve dans votre cerveau, qui prouve que AES est un cryptage sécurisé et qui prouve que le gouvernement utilise bien ce cryptage? Vous allez me parler d’expert, la encore des expert que vous ne connaissez que depuis le net. Et puis, des expert, j’en est connu y’a 150000ans qui disait que la terre était plate alors que même aujourd’hui tout le monde croit quel est rond, hors qu’est-ce vous en savez vous tout de suite? (une photo pour moi c’est pas une preuves, il y a la physique et bien d’autres.) vous vous laisser berné par tout ce qu’on vous dit sans preuve. Vue que 1milliard de personne vous disent la terre est ronde sa veut dire quel l’ai (-_-) ! J’dit pas le contraire ceci dit, j’approuve pas non plus n’aillant aucune preuve exacte. (a vrai dire je pense quel est ronde bien-sûr, ceci dit j’évite de dire sa car j’ai vue une photo d’une planète ronde et qu’on me dit que c’est ma planète vue de haut alors que rien me prouve que c’est bien ma planète. Pourquoi ferait-il sa? ho, plein de chose)

    Donc voilà, ne faites pas confiance à n’importe qui est faite selon vos compétence (le mieux aussi c’est de vouloir des compétence) sinon sa sert à rien sa c’est clair.

    Un coffre de bank si tu le surveille pas, il y a un nombre infinie de possibilité pour ouvrir ce coffre (c’est comme sa la matière (matière ou pas d’ailleurs))
    Tout comme il y a un nombre infinie de possibilité d’ouvrir le coffre si tu le surveille. Seulement tu est la, donc une intélligence réel pour intervenir, contré ou patché à tout moment un problème, ou pas.

    Je pense arrêter la 🙂

  14. | #14

    Comme supprimer et modérer le commentaire ci-avant de zda rendrait service à celui-ci nous choisissons avec l’équipe Geekfault de laisser celui-ci en ligne, pour la bonne poilade qu’il nous a procuré.
    Dans un esprit de partage (qui caractérise Geekfault), je pense qu’il faut vraiment laisser celui-ci en ligne.
    zda merci !

  15. Jerome
    | #15

    @zda
    Pour commencer, quand on veut se la raconter, on dit “chiffrement” et pas “cryptage” 🙂

    (Et on apprend les bases de l’orthographe avant celles de la cryptographie)

  16. mouai
    | #16

    @Jerome, si tu avais dis ça à Einstein il aurait certainement bien ris de toi.

  17. | #17

    Dites les cops, utiliser une clé USB pour en combinant ses caractéristiques générer une longue liste de caractères majuscules, minuscules, chiffres, signes, en tout cas suffisamment abscons pour être utilisée comme un mot de passe n’est pas en soit une mauvaise idée et peu se révéler très pratique.
    Elle possède les propriétés suivantes suffisamment longue 24 caractères, ne pas pouvoir s’en souvenir, ne pas la stocker, ne pas avoir à la taper, bien construite, pas de caractères à double, pas de caractères répétitifs, répondant aux tests durs (Passwordmeter.com), pour des simples utilsateurs comme nous c’est déjà pas mal. J’ai un petit soft Windows à disposition qui transforme n’importe quelle clé usb flash disk. example: Ju2.Gz3[At0-Ch1%

  18. Denis
    | #18

    Oh ben il est pas tout jeune ce post. Mais comme je l’ai trouvé sur le sujet des Yubikeys, sachez que suite à un projet terminé il m’en reste quelques unes (5 -6) à céder à des geeks qui se respectent à prix très raisonnable.
    On ne peut plus s’en passer une fois adoptée – et par ailleurs depuis ce sujet les applis ont bien grandi en nombre 😉

  19. WTF
    | #19

    @zda
    Sors de ce corps Jean-claude Van Damme ! Et, pitié, vraiment pitié, achètes toi un Bescherelle …

  20. | #20

    Nice post at Ruth A. Remple: Pass the Fair Elections Now Act | Daily Camera: Letters to the Editor. I was checking continuously this blog and I’m impressed! Very helpful information particularly the last part I care for such info much. I was looking for this particular information for a long time. Thank you and best of luck.

  1. | #1
  2. | #2
  3. | #3