Yubikey

Yubikey

Notes › _DIFFUSION

Mot de passe statique

Oui. Le plus simple est de configurer un mot de passe statique dans le slot OTP 1 ou 2. Au toucher, la YubiKey se comporte comme un clavier et saisit automatiquement ce mot de passe dans le champ actif.

⚠️ Le mot de passe sera stocké de façon récupérable par la YubiKey et sera envoyé comme une frappe clavier. Toute personne qui possède la clé peut donc l’utiliser. N’utilise pas cette méthode pour un mot de passe important si tu peux utiliser une passkey, FIDO2 ou une authentification par certificat.

Installe YubiKey Manager (ykman), puis vérifie que la clé est détectée :

1
ykman list

Si ton objectif est de déverrouiller directement une session Windows, Linux ou macOS, le mot de passe statique n’est pas la meilleure solution : il ne remplace pas automatiquement le mécanisme de connexion du système. Il vaut mieux configurer la YubiKey en FIDO2/passkey, PIV ou avec un module de connexion adapté au système.

Votre version utilise bien la sous-commande static — et non static-password. La commande correcte est :

1
ykman otp static 2

Elle vous demandera ensuite le mot de passe à enregistrer. Le slot 2 s’active par un appui long sur la zone métallique ; le slot 1, par un appui court.

Pour utiliser une disposition de clavier française et envoyer automatiquement la touche Entrée :

1
ykman otp static --keyboard-layout FR --enter 2

Pour éviter que la YubiKey valide automatiquement le formulaire :

1
ykman otp static --keyboard-layout FR --no-enter 2

Vous pouvez aussi fournir le mot de passe directement, mais ce n’est pas recommandé car il restera dans l’historique du terminal :

1
ykman otp static --keyboard-layout FR 2 "MotDePasse"

Pour générer un mot de passe aléatoire plutôt que stocker celui de votre session :

1
ykman otp static --generate --length 38 2

Vérifiez ensuite la configuration :

1
ykman otp info

Puis placez le curseur dans le champ du mot de passe et touchez la zone métallique. La YubiKey saisira le mot de passe comme un clavier USB. Cette fonction ne passe pas par NFC : le mot de passe statique est communiqué par USB, même si votre modèle est une YubiKey 5 NFC.

Pour effacer le slot 2 :

1
ykman otp delete 2

À noter : votre mot de passe de session sera stocké comme mot de passe statique et pourra être émis par toute personne possédant la clé. Pour une connexion au système, une passkey/FIDO2 est nettement préférable.

Linux display manager (sddm)

Sur CachyOS KDE, vérifiez quel display manager est actuellement actif avec :

1
systemctl status display-manager

La ligne importante ressemble à :

1
2
Loaded: loaded (.../sddm.service; enabled)
Active: active (running)

Vous pouvez aussi obtenir uniquement le nom du service :

1
systemctl show -p Id --value display-manager

Résultat typique :

1
sddm.service

ou :

1
lightdm.service

Une autre méthode :

1
readlink -f /etc/systemd/system/display-manager.service

Exemples :

1
/usr/lib/systemd/system/sddm.service

→ c’est SDDM

1
/usr/lib/systemd/system/lightdm.service

→ c’est LightDM

Pour voir les gestionnaires installés :

1
pacman -Qs 'sddm|lightdm|gdm'

Pour voir le processus actuellement lancé :

1
ps -eo user,pid,comm,args | grep -E '[s]ddm|[l]ightdm|[g]dm'

Sur une installation KDE Plasma standard, le résultat sera généralement :

1
sddm.service

Les fichiers PAM correspondants sont habituellement :

1
2
3
/etc/pam.d/sddm
/etc/pam.d/lightdm
/etc/pam.d/gdm-password

Vous pouvez confirmer qu’un fichier existe avant de le modifier :

1
ls -l /etc/pam.d/sddm /etc/pam.d/lightdm /etc/pam.d/gdm-password 2>/dev/null

Dans votre cas, commencez donc par :

1
systemctl show -p Id --value display-manager

Puis utilisez le fichier PAM correspondant, par exemple /etc/pam.d/sddm si le résultat est sddm.service. Conservez toujours une session administrateur déjà ouverte avant de modifier PAM.

Yubikey suppression PIN

Oui, mais il n’existe pas de commande pour désactiver uniquement le PIN FIDO2 en conservant les enregistrements FIDO2. Pour supprimer le PIN, il faut réinitialiser l’application FIDO :

1
ykman fido reset

Confirmez avec y, puis touchez la YubiKey si demandé.

⚠️ Cette commande efface tout ce qui concerne FIDO sur cette clé :

  • le PIN FIDO2 ;
  • les enregistrements U2F utilisés par pam-u2f ;
  • les passkeys résidentes ;
  • les autres credentials FIDO.

Elle ne supprime pas votre configuration OTP challenge-response du slot 1, ni les applications OATH, PIV ou OpenPGP. La réinitialisation FIDO est toutefois irréversible pour les inscriptions FIDO présentes sur la clé.

Après le reset, vérifiez l’état :

1
ykman fido info

Puis réenregistrez la clé pour PAM, sans -n :

1
2
3
mkdir -p ~/.config/Yubico
pamu2fcfg >> ~/.config/Yubico/u2f_keys
chmod 600 ~/.config/Yubico/u2f_keys

Cette fois, pamu2fcfg ne devrait plus demander de PIN. Il demandera normalement seulement de toucher la clé.

Avant de lancer ykman fido reset, vérifiez que vous n’utilisez pas cette clé comme passkey ou clé de sécurité pour d’autres services. Le reset FIDO ne touche pas votre slot challenge-response utilisé pour le déchiffrement LUKS.

FIDO2/U2F avec pam-u2f

Pour CachyOS KDE, la bonne solution est d’utiliser FIDO2/U2F avec pam-u2f pour l’ouverture de session. Votre configuration actuelle en challenge-response pour LUKS reste séparée : le même YubiKey peut servir aux deux usages, car les mécanismes et les emplacements sont différents.

Le fonctionnement recommandé est :

  1. mot de passe utilisateur dans SDDM ;
  2. insertion de la YubiKey ;
  3. toucher la clé ;
  4. ouverture de la session KDE.

pam-u2f est précisément le module PAM prévu pour intégrer une YubiKey FIDO2/U2F à l’authentification Linux.

Installer le module

Sur CachyOS :

1
sudo pacman -Syu pam-u2f

Vérifiez que les outils sont disponibles :

1
which pamu2fcfg

Enregistrer la YubiKey pour votre utilisateur

Créez le fichier de configuration utilisateur :

1
2
3
mkdir -p ~/.config/Yubico
pamu2fcfg > ~/.config/Yubico/u2f_keys
chmod 600 ~/.config/Yubico/u2f_keys

Lorsque la clé clignote, touchez-la brièvement.

Pour enregistrer une deuxième YubiKey de secours :

1
pamu2fcfg -n >> ~/.config/Yubico/u2f_keys

Ne mettez pas ce fichier dans votre répertoire /home chiffré si vous voulez l’utiliser avant le déchiffrement du disque : PAM doit pouvoir le lire avant que la session soit ouverte. Un fichier central tel que /etc/u2f_mappings est préférable pour l’écran de connexion.

Utiliser un fichier central

Copiez l’enregistrement dans un fichier lisible par PAM :

1
2
grep "^$(id -un):" "$HOME/.config/Yubico/u2f_keys" | sudo tee /etc/u2f_mappings >/dev/null
sudo chmod 600 /etc/u2f_mappings

Vérifiez son contenu :

1
sudo cat /etc/u2f_mappings

Il doit commencer par votre nom d’utilisateur, suivi de deux-points et d’une longue chaîne de caractères.

Tester d’abord avec sudo

Gardez un terminal root ouvert pendant la configuration, afin d’éviter de vous enfermer dehors :

1
sudo -i

Dans un autre terminal, sauvegardez la configuration PAM :

1
sudo cp -a /etc/pam.d/sudo /etc/pam.d/sudo.bak

Éditez /etc/pam.d/sudo :

1
sudoedit /etc/pam.d/sudo

Ajoutez avant les autres lignes auth :

1
auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

Avec sufficient, la YubiKey seule peut suffire pour sudo, mais le mot de passe reste utilisable comme solution de secours. Testez :

1
2
sudo -k
sudo -v

La clé doit clignoter ; touchez-la.

Modifier sddm

Vous utilisez SDDM, le fichier à configurer pour l’écran de connexion graphique est :

1
/etc/pam.d/sddm

Avant toute modification, gardez un terminal root ouvert :

1
sudo -i

Puis sauvegardez les fichiers concernés :

1
2
sudo cp -a /etc/pam.d/sddm /etc/pam.d/sddm.bak
sudo cp -a /etc/pam.d/system-login /etc/pam.d/system-login.bak

Ajoutez ensuite dans /etc/pam.d/sddm, au début de la section d’authentification :

1
auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

Édition :

1
sudoedit /etc/pam.d/sddm

Si le fichier contient déjà une ligne comme :

1
auth    include    system-login

placez la ligne pam_u2f.so avant cette ligne, par exemple :

1
2
auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue
auth    include       system-login

Avec sufficient, la YubiKey peut authentifier l’utilisateur, mais le mot de passe reste disponible en secours.

Ne modifiez pas encore system-auth, system-login ou sddm-greeter. Commencez uniquement par /etc/pam.d/sddm, puis redémarrez :

1
sudo systemctl restart sddm

Vous serez déconnecté de la session graphique. Gardez votre session root ouverte dans un terminal TTY ou un terminal séparé afin de pouvoir restaurer la configuration

en cas de problème :

1
sudo cp -a /etc/pam.d/sddm.bak /etc/pam.d/sddm

Important : vérifiez que le module existe avant de modifier SDDM :

1
ls -l /usr/lib/security/pam_u2f.so

S’il n’existe pas, installez le paquet correspondant :

1
sudo pacman -S pam-u2f

Votre fichier /etc/pam.d/sddm peut aussi simplement déléguer l’authentification à system-login. Dans ce cas, la modification correcte peut être dans /etc/pam.d/system-login, mais commencez par sddm pour limiter le risque d’affecter sudo, les consoles et les autres services.

Option

Le fichier /etc/pam.d/system-login ne contient pas directement pam_u2f, mais il délègue l’authentification à :

1
auth    include    system-auth

Vous pouvez ajouter pam_u2f dans system-login, juste avant cette ligne :

1
2
3
4
auth       required   pam_shells.so
auth       requisite  pam_nologin.so
auth       sufficient pam_u2f.so authfile=/etc/u2f_mappings cue
auth       include    system-auth

Sauvegardez d’abord le fichier :

1
sudo cp -a /etc/pam.d/system-login /etc/pam.d/system-login.bak

Puis éditez-le :

1
sudoedit /etc/pam.d/system-login

Cette modification permettra l’authentification YubiKey pour tous les services qui utilisent system-login, pas uniquement SDDM : console virtuelle, su, éventuellement verrouillage graphique et autres services. Avec sufficient, le mot de passe reste normalement accepté en secours.

Comme SDDM contient déjà cette ligne :

1
auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

vous risquez d’avoir pam_u2f appelé deux fois par SDDM, une fois dans /etc/pam.d/sddm et une fois via system-login. Ce n’est généralement pas nécessaire. Après avoir ajouté la ligne dans system-login, vous pouvez supprimer ou commenter celle de /etc/pam.d/sddm :

1
# auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

Conservez la ligne dans system-login.

Testez d’abord depuis un terminal :

1
pamtester login "$USER" authenticate

Puis testez :

1
pamtester sudo "$USER" authenticate

Ne testez pas directement la fermeture de votre session graphique. Gardez une console TTY disponible avec :

1
Ctrl+Alt+F3

En cas de problème, restaurez le fichier :

1
sudo cp -a /etc/pam.d/system-login.bak /etc/pam.d/system-login

Pour votre objectif immédiat, l’ouverture SDDM fonctionne déjà. La modification de system-login est surtout utile pour étendre l’usage de la YubiKey au verrouillage ou à d’autres connexions PAM.

Synthèse

Parfait : cela confirme que pam_u2f fonctionne correctement avec SDDM.

Le fonctionnement est donc :

  1. sélectionner votre utilisateur dans SDDM ;
  2. laisser le champ mot de passe vide ;
  3. cliquer sur Connexion ;
  4. toucher la YubiKey lorsqu’elle clignote.

Vous pouvez maintenant retirer debug de /etc/pam.d/sddm si vous l’avez ajouté :

1
auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

Gardez cette ligne avant :

1
auth    include    system-login

Votre configuration permet normalement aussi l’ouverture de session avec le mot de passe si la YubiKey est absente ou échoue, grâce à sufficient.

Pour verrouiller la session KDE avec la clé, ajoutez la même ligne dans le fichier PAM utilisé par le verrouillage de session, souvent :

1
/etc/pam.d/system-login

Mais testez d’abord l’ouverture de session SDDM comme elle fonctionne actuellement. Ne modifiez pas system-login sans conserver une sauvegarde :

1
sudo cp -a /etc/pam.d/system-login /etc/pam.d/system-login.bak

Votre séparation est maintenant correcte :

  • slot OTP 1 challenge-response : déverrouillage du volume LUKS au démarrage ;
  • FIDO2 avec pam_u2f : ouverture de session SDDM ;
  • mot de passe utilisateur : solution de secours.

Problème KDE Wallet

Il y a un problème à utiliser la clé pour l'ouverture de session, il n'y a plus de mot de passe saisi et on bloque sur KDE wallet qui exige un mot de passe (celui de la session avant utilisation de la clé) C’est normal : une authentification FIDO2 réussie ne fournit pas le mot de passe de session à KDE Wallet. La YubiKey prouve votre identité, mais elle ne révèle pas le mot de passe utilisé pour chiffrer le portefeuille.

Vous avez donc trois possibilités.

La plus sûre : utiliser la YubiKey avec le mot de passe

Dans SDDM, saisissez le mot de passe de session puis utilisez la YubiKey lorsque cela est demandé. KDE Wallet pourra alors être déverrouillé automatiquement avec le même mot de passe.

Dans ce cas, ne mettez pas pam_u2f en sufficient seul avant le mot de passe. Il faut conserver une authentification nécessitant le mot de passe, ou utiliser la YubiKey uniquement comme second facteur.

La solution sans mot de passe : supprimer le mot de passe de KDE Wallet

Ouvrez KDE Wallet Manager :

1
kwalletmanager5

Puis, selon l’interface :

  1. sélectionnez le portefeuille kdewallet ;
  2. choisissez Modifier le mot de passe ;
  3. entrez l’ancien mot de passe ;
  4. définissez un mot de passe vide si l’application l’autorise.

Le portefeuille pourra alors s’ouvrir sans mot de passe, mais toute personne ayant accès à votre session ouverte pourra accéder aux secrets qu’il contient. Cette solution est déconseillée sur un ordinateur portable ou partagé.

La solution intermédiaire : ouvrir la session avec la clé, puis déverrouiller Wallet manuellement

Vous laissez un mot de passe à KDE Wallet et, après la connexion par YubiKey, vous saisissez ce mot de passe une fois dans la fenêtre KDE Wallet. Cela protège mieux les secrets, mais ne donne pas une connexion totalement sans saisie.

Le point essentiel est le suivant :

1
2
FIDO2/YubiKey → authentifie l’utilisateur
mot de passe → déchiffre KDE Wallet

Ces deux fonctions sont indépendantes. pam_kwallet5 peut récupérer le mot de passe uniquement s’il a été saisi dans la pile PAM ; il ne peut pas le déduire d’une authentification FIDO2.

Pour votre configuration, je recommande :

  • YubiKey challenge-response pour LUKS ;
  • mot de passe utilisateur + YubiKey pour SDDM, si vous voulez le déverrouillage automatique de KDE Wallet ;
  • ou YubiKey seule pour SDDM, avec déverrouillage manuel de KDE Wallet ;
  • éviter un portefeuille KDE sans mot de passe, sauf si le risque vous convient.

Vous pouvez aussi retirer temporairement la ligne pam_u2f de /etc/pam.d/sddm pour revenir à une connexion classique avec déverrouillage automatique de KDE Wallet :

1
# auth    sufficient    pam_u2f.so authfile=/etc/u2f_mappings cue

La clé continuera de fonctionner pour le déchiffrement LUKS, car ce mécanisme utilise votre slot challenge-response indépendamment de PAM et de KDE Wallet.