Yubikey Yubico : le login facile

Yubikey Yubico : le login facile
Photo by Micah Williams / Unsplash

Un petit soucis m'a fait perdre ce post, alors je le réécris avec un tantinet de retard. Ouai, c'était y a maintenant 10 mois. Un petit moment, certes. Le projet n'a pas eu d'avancement phénoménal et je n'ai pas eu plus de temps que cela à y consacrer. Il n'y aura même pas de nouveautés, mais peu importe, l'exercice est sympa.

J'ai écris un petit outil pour débuter dans Rust, mon premier projet Rust autant le dire, pour me faciliter la tâche de configuration linux pour me permettre d'utiliser ma Yubikey. Le setup n'est en soi pas complexe, cela dit j'ai pas envie de le réitérer à chaque fois que j'utilise un nouvel ordinateur. Exemple celui du boulot. Vous trouverez le code source de yubico_helper sur gitlab. Pourquoi pas Github ? Ce n'est pas le sujet, peut-être plus tard :D

Les fonctionnalités de l'outil sont les suivantes:

  • Configuration de PAM pour utiliser au choix les modules:
    • pam_yubico: Permet de faire du 2FA ou juste de l'authent' classique avec la Yubikey avec validation en ligne sur un serveur de Yubico ou bien un serveur privé délivrant le service à votre réseau. Plus récemment, depuis la version 2.6, il est aussi possible de faire une validation avec un mécanisme de Challenge-Response complètement offline sans serveur. Auquel cas, une configuration supplémentaire est requise.
    • pam_u2f: Pour Universal 2 factor, aussi compatible FIDO2, permet de réaliser une authentification offline.

Pour configurer PAM, l'outil par défaut modifie les fichiers suivants:

  • /etc/pam.d/system-auth: gère l'authentification système (merci mr. obvious), en gros votre login de session.
  • /etc/pam.d/polkit-1: gère l'authentification avec PolicyKit, qui pour faire court, est celui que fait poper des fenêtres vous demandant de taper votre mot de passe pendant votre session quand avez une élévation de privilèges.
  • /etc/pam.d/sudo: celui-là, je ne sais plus, ah si, il gère sudo. Incredible.

En plus de ces fichiers, il configure aussi le fichier ~/.config/Yubico/u2f_keys, nécessaire pour le module u2f pour lié votre utilisateur avec la clé. Pour cela, il utilise un outil fournit avec le module: pamu2fcfg.

Pour chacun d'eux vous pourrez modifié le fichier et le chemin. Voici les options globales:

Options:
  -c, --cleanup
          Cleanup yubico_helper configuration snippets from files
  -d, --dryrun
          Dry run the modification and displaying them in the stdout
  -v, --verbose
          Increase verbosity
      --pam-systemauth-file <PAM_SYSTEMAUTH_FILE>
          Specify where is the system-auth pam file [default: /etc/pam.d/system-auth]
      --pam-polkit-file <PAM_POLKIT_FILE>
          Specify where is the polkit-1 pam file [default: /etc/pam.d/polkit-1]
      --pam-sudo-file <PAM_SUDO_FILE>
          Specify where is the sudo pam file [default: /etc/pam.d/sudo]
  -h, --help
          Print help
  -V, --version
          Print version

Et les options pour les 2 modules PAM.

$ yubico_helper yubico -h
Configure pam_yubico for your system

Usage: yubico_helper yubico [OPTIONS] --id <ID> <AUTH> <AUTHMODE>

Arguments:
  <AUTH>      How do you prefer to use pam_yubico : [possible values: sufficient, required]
  <AUTHMODE>  Which mode you want to use with pam_yubico [possible values: client, challenge-response]

Options:
  -d, --debug    Enable or disable the debug flag
  -i, --id <ID>  Your API Client ID inf the Yubico validation server. Go here to use the default YubiCloud service: https://upgrade.yubico.com/getapikey
  -f, --force    Force to write no matter if an existing line using Yubico PAM module exists
  -h, --help     Print help (see more with '--help')
  -V, --version  Print version

pam-yubico

$ yubico_helper u2f -h
Configure pam_u2f for your system

Usage: yubico_helper u2f [OPTIONS] <AUTH>

Arguments:
  <AUTH>  How do you prefer to use pam_u2f : [possible values: sufficient, required]

Options:
  -d, --debug    Enable or disable the debug flag
  -f, --force    Force to write no matter if an existing line using U2F PAM modules exists
  -h, --help     Print help (see more with '--help')
  -V, --version  Print version

pam-u2f

Selon les options choisies vous passerez votre authentification en MFA, AUTH à required, ou bien pouvant être simplement utilisé pour vous authentifier à la place de votre mot de passe, celui fonctionnant toujours, c'est simplement une autre possibilité. Cette dernière option étant lorsque vous choisissez l'AUTH sufficient.

Vous aurez la configuration ajoutée au bon endroit, car l'ordre compte avec PAM, et entourée des balises:

##### BEGIN YUBICO HELPER #####
###### END YUBICO HELPER ######

Ce qui est pratique pour savoir qui fait quoi quand c'est pas git qui gère le truc et pour retrouver ses petits.

La deuxième chose que configure yubico_helper c'est udev, le composant chargé de rendre accessible votre matériel avec les bons noms, aux bonnes personnes, avec les bons droits et les bons types sur votre système. C'est un peu le patron de /dev, en gros.

Il permet d'ajouter une règle qui, à la détection du débranchement de la clé, verrouille votre session.

$ yubico_helper udev -h
Use UDev to automatically lock your session when you unplugged your key Display the status without arguments provided

Usage: yubico_helper udev [OPTIONS]

Options:
  -f, --filename <FILENAME>  Change the default udev rules file name [default: /etc/udev/rules.d/20-yubikey.rules]
  -e, --enabled              Add an Udev rules to automatically lock your session when the usb key is unplugged
  -d, --disabled             Comment the rule that autolock your session when the yubikey is unplugged
  -h, --help                 Print help
  -V, --version              Print version

Quand j'aurais un peu de temps, je le ferais sûrement évoluer pour mieux gérer les différents modes. Je n'ai pas testé plus que ça le module Yubico en mode Challenge-Response. Ensuite, j'aimerais amélioré la prise en charge de plusieurs Yubikey et pourquoi quelques commandes pour gérer la base du stockage de clé GPG pour la signature, chiffrement etc.

Voilà en espérant que cet outil vous facilite la vie. Il doit encore avoir quelque soucis je pense. Mais n'hésitez pas à les signaler par le biai du dépôt gitlab. Merci 😄