Yubikey Yubico : le login facile
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.
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 😄