Table des matières
Client Kanidm — login système des portables (kanidm-unixd)
Dernière mise à jour : juin 2026
État : config validée et fonctionnelle en ligne (nom court, home court, SSH OK). Un point précis en suspens : l'authentification hors ligne est refusée (voir section dédiée).
Objectif
Permettre aux 4 utilisateurs de se connecter à leurs portables avec leurs identifiants Kanidm centralisés, y compris hors réseau grâce au cache local de kanidm-unixd. Les homes restent locaux (pas de NFS).
Machines de test
- Portable Debian : lat7400 — Debian Trixie (13), kernel 6.12 — machine de référence, config validée
- Portable Ubuntu : clelinfoue — Ubuntu 26.04 LTS (resolute) — première install, a servi à défricher
- Compte de test :
testkanidm(UID/GID 5000, n'existe sur aucun PC en local) - Distributions cibles à terme : Debian, Ubuntu, Arch
Installation
Dépôt PPA Kanidm — choix du codename
Le PPA ne reconnaît que les codenames LTS connus. Pour les versions récentes, forcer la cible LTS la plus proche :
- Ubuntu 26.04 (resolute) → forcer
noble(24.04) - Debian Trixie (13) → forcer
bookworm(12)
sudo mkdir -p /etc/apt/trusted.gpg.d/ curl -s "https://kanidm.github.io/kanidm_ppa/kanidm_ppa.asc" \ | sudo tee /etc/apt/trusted.gpg.d/kanidm_ppa.asc >/dev/null # Adapter le codename : noble (Ubuntu récent) ou bookworm (Debian récent) echo "deb [arch=amd64,arm64 signed-by=/etc/apt/trusted.gpg.d/kanidm_ppa.asc] https://kanidm.github.io/kanidm_ppa noble stable" \ | sudo tee /etc/apt/sources.list.d/kanidm_ppa.list sudo apt update
Paquets
sudo apt install -y kanidm-unixd libnss-kanidm libpam-kanidm kanidm
Version PPA installée : 1.10.2. Serveur en 1.10.3. Un warning « Mismatched client and server version » apparaît ; aucun impact constaté sur le fonctionnement en ligne (voir note versions).
Configuration
/etc/kanidm/config
uri = "https://auth.beafrancois.fr" verify_ca = false
verify_ca pourra passer à true (Caddy présente un certificat Let's Encrypt valide). À valider en LAN et hors LAN.
/etc/kanidm/unixd — CONFIG VALIDÉE
Point clé découvert : dans le format version = '2', les options de mapping / résolution / home doivent être placées à la racine du fichier, PAS sous [kanidm]. Seules les options propres au provider (pam_allowed_login_groups, default_shell) vont sous [kanidm].
C'est ce placement qui corrige le suffixe @beafrancois.fr (nom et home courts).
version = '2' uid_attr_map = "name" gid_attr_map = "name" home_attr = "uuid" home_alias = "name" home_prefix = "/home/" [kanidm] pam_allowed_login_groups = ["famille"] default_shell = "/bin/bash"
⚠️ Pièges sur ce fichier :
- La section
[kanidm]est commentée par défaut. Sans elle (décommentée), le provider n'est pas actif → « No provider is willing to service authentication ». - Ne pas laisser deux lignes
version = '2' (le template en a déjà une) → erreurduplicate keyau démarrage depam-auth-update. - Résultat attendu :
getent passwd testkanidm→testkanidm:x:5000:5000:…:/home/testkanidm:/bin/bash(sans suffixe), et un symlink/home/testkanidm → /home/<uuid>.
/etc/nsswitch.conf
Selon la doc Kanidm : kanidm en premier, systemd en dernier.
passwd: kanidm files systemd group: kanidm files systemd
PAM (pam-auth-update)
Cocher : Unix authentication, Kanidm Authentication, Create home directory on login, Maintain wtmp, Register user sessions in systemd, GNOME Keyring. Décocher toute entrée SSS/SSSD.
Spécificités par distribution
Debian Trixie
- Dépôt : forcer
bookworm - AppArmor : non bloquant. Le profil
unix-chkpwdde Trixie autorise déjà l'accès au socket Kanidm (logapparmor=“ALLOWED” … /etc/kanidm/unixd). Aucune action requise. - SSH :
KbdInteractiveAuthentication yesa aussi été positionné sur Trixie (par cohérence avec Ubuntu). À vérifier si Trixie en a réellement besoin avec sa valeur par défaut, ou si c'est superflu ici — non tranché. - Installation globalement plus propre que sur Ubuntu (moins de frictions).
Ubuntu 26.04
- Dépôt : forcer
noble - AppArmor : bloquant. Le profil
unix-chkpwdbloque l'accès au socket Kanidm (apparmor=“DENIED” … /run/kanidm-unixd/sock) → l'auth échoue. Contournement :
sudo apt install -y apparmor-utils sudo aa-complain unix-chkpwd
- SSH : nécessitait un correctif.
KbdInteractiveAuthentication nodans/etc/ssh/sshd_configempêche le login par mot de passe via PAM. Passer à :
KbdInteractiveAuthentication yes
puis sudo systemctl restart ssh.
- sssd résiduel. La machine avait
sssdinstallé (inactif). Il entre en conflit avec kanidm-unixd. Retiré :
sudo systemctl stop sssd && sudo systemctl disable sssd sudo apt remove --purge sssd sssd-common libsss-* 2>/dev/null
- Symptôme
fatal: PAM user mismatchau login SSH : causé par le suffixe@beafrancois.fr(nom long). Réglé par le bon placement deuid_attr_mapà la racine (voir config validée). Avant correctif, contournement :ssh 'testkanidm@beafrancois.fr'@localhost.
Mise en service côté serveur (rappel)
# POSIX sur l'utilisateur, UID/GID forcé pour matcher les comptes locaux ~/kanidm-cli person posix set testkanidm --name idm_admin --gidnumber 5000 # Le GROUPE d'accès PAM doit AUSSI être POSIX (sinon account failed) ~/kanidm-cli group posix set famille --name idm_admin # Appartenance au groupe autorisé ~/kanidm-cli group add-members famille testkanidm --name idm_admin
Mot de passe Unix (POSIX) — DISTINCT du mot de passe web/principal. Deux méthodes :
- CLI :
~/kanidm-cli person posix set-password testkanidm –name idm_admin - Interface web : via le lien de réinitialisation (
person credential create-reset-token), choisir “Add Unix password”
⚠️ Politique de complexité stricte (rejet des mots de passe faibles/compromis). Utiliser une passphrase longue.
⚠️ PIÈGE IMPORTANT — le flux web casse le credential POSIX. Modifier le mot de passe principal (web) via l'interface de réinitialisation invalide le credential POSIX existant. Symptôme : l'auth POSIX (login système, auth-test) échoue en ligne avec auth failed alors qu'elle marchait avant, même si le mot de passe principal et le POSIX ont la même valeur. Correctif : redéfinir le mot de passe POSIX en CLI après toute modification web :
~/kanidm-cli person posix set-password testkanidm --name idm_admin sudo kanidm-unix cache-invalidate # côté client
Conséquence pratique : éviter de mélanger gestion web (principal) et CLI (POSIX) sur un même compte sans refaire le POSIX ensuite.
État actuel — ce qui fonctionne
- ✓ Daemon
kanidm-unixdonline, connecté au serveur - ✓ Résolution NSS avec nom court (
testkanidm, plus de suffixe) - ✓ Home court (
/home/testkanidm→ symlink vers/home/<uuid>) - ✓ Authentification en ligne de bout en bout (
auth success! account success!) - ✓ Login
su,sudo sufonctionnels - ✓ Login SSH en ligne avec nom court (Debian : direct ; Ubuntu : après correctif KbdInteractive)
- ✓ Création automatique du home
- ✓ TPM détecté, HSM initialisé, credential mis en cache lors de l'auth en ligne (log
Updated cached pw)
Point en suspens : authentification HORS LIGNE refusée
C'est le point bloquant pour l'objectif initial (login sans réseau).
Symptôme
Hors ligne (réseau réellement coupé) :
account success— la résolution du compte fonctionne (données cachées OK)auth failed— la vérification du mot de passe échoue, avec le même mot de passe qui fonctionne en ligne
Ce que montrent les logs (RUST_LOG=debug)
En ligne, auth réussie — le credential EST mis en cache :
unix_user_online_auth_step Updated cached pw | spn: testkanidm@beafrancois.fr Authentication Success
Hors ligne, le chemin offline est bien emprunté mais refuse :
pam_account_authenticate_step get_cached_usertoken ← le credential caché est lu hmac_s256 ← le hash du mot de passe saisi est calculé Authentication Denied
Donc : le credential est caché, le chemin offline le relit, calcule le hash du mot de passe, et la comparaison échoue alors que c'est le même mot de passe qu'en ligne.
Pistes écartées factuellement
- Mot de passe erroné : non — il fonctionne en ligne juste avant/après, de façon répétée
- Cache désynchronisé après changement de mot de passe : non — plusieurs auth en ligne réussies (
Updated cached pw) ont eu lieu après le dernier changement - Credential non mis en cache : non — le log
Updated cached pwle confirme - Données de compte non cachées : non —
account successen offline - TPM absent : non — TPM présent, HSM initialisé
- Credential POSIX cassé par le flux web : écarté pour le offline — après avoir redéfini le POSIX en CLI et fait une auth en ligne réussie juste avant de couper (donc credential frais et fraîchement mis en cache), le offline échoue toujours à l'identique. Ce piège web (voir section serveur) explique des échecs en ligne, pas l'échec offline.
Hypothèse à investiguer (non confirmée)
Le hash est lié au HSM/TPM. Si le pin/clé HSM n'est pas relu de façon déterministe entre la mise en cache et la vérification hors ligne, le credential caché devient invérifiable. Le log montre un Generated new HSM pin à l'init — à creuser : ce pin est-il stable entre redémarrages / sessions ?
Prochaine étape recommandée
Ne pas multiplier les hypothèses. Poser la question aux mainteneurs Kanidm (issue GitHub ou forum) avec la signature exacte du problème : hmac_s256 suivi de Authentication Denied en mode offline, alors que le même mot de passe réussit en ligne et que Updated cached pw apparaît bien lors de l'auth en ligne. Joindre la version (client 1.10.2 / serveur 1.10.3) et la config unixd.
Note : alignement des versions
Client 1.10.2 (PPA) vs serveur 1.10.3 (Docker latest). Pas de preuve que ça cause le problème offline, mais l'alignement est souhaitable. Lié au sujet stratégie de mise à jour des images Docker (épingler les versions Kanidm plutôt que subir latest). À traiter séparément.
Bascule des vrais comptes (plus tard)
- Le home en
/home/<uuid>+ symlink est le mode recommandé par Kanidm (home_attr = “uuid”) - Pour les vrais utilisateurs avec
/home/francoisexistant : prévoir la migration du contenu vers le dossier UUID, ou une stratégie d'alias adaptée - Ne supprimer les comptes locaux (
userdelsans-r) qu'après validation complète, PC par PC - Chiffrement disque (LUKS) recommandé (le cache offline stocke des credentials)
Commandes de diagnostic utiles
sudo kanidm-unix status # online/offline + état serveur sudo kanidm-unix auth-test --name testkanidm # test auth+account isolé sudo kanidm-unix cache-invalidate # refresh cache (garde l'offline) sudo kanidm-unix cache-clear --really # efface TOUT le cache (perte offline) getent passwd testkanidm ; id testkanidm # résolution NSS # Logs détaillés sudo systemctl edit kanidm-unixd # ajouter [Service] Environment="RUST_LOG=debug" sudo systemctl restart kanidm-unixd sudo journalctl -u kanidm-unixd -f | grep -iE "testkanidm|online|offline|cred|tpm|hsm|hmac" # Tests de login (du moins au plus complet) sudo su - testkanidm # court-circuite l'auth (account + session) su - testkanidm # auth + account + session, hors SSH ssh testkanidm@localhost
