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).
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).
testkanidm (UID/GID 5000, n'existe sur aucun PC en local)Le PPA ne reconnaît que les codenames LTS connus. Pour les versions récentes, forcer la cible LTS la plus proche :
noble (24.04)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
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).
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.
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 :
[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 ».version = '2' (le template en a déjà une) → erreur duplicate key au démarrage de pam-auth-update.getent passwd testkanidm → testkanidm:x:5000:5000:…:/home/testkanidm:/bin/bash (sans suffixe), et un symlink /home/testkanidm → /home/<uuid>.
Selon la doc Kanidm : kanidm en premier, systemd en dernier.
passwd: kanidm files systemd group: kanidm files systemd
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.
bookwormunix-chkpwd de Trixie autorise déjà l'accès au socket Kanidm (log apparmor=“ALLOWED” … /etc/kanidm/unixd). Aucune action requise.KbdInteractiveAuthentication yes a 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é.nobleunix-chkpwd bloque 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
KbdInteractiveAuthentication no dans /etc/ssh/sshd_config empêche le login par mot de passe via PAM. Passer à :KbdInteractiveAuthentication yes
puis sudo systemctl restart ssh.
sssd installé (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
fatal: PAM user mismatch au login SSH : causé par le suffixe @beafrancois.fr (nom long). Réglé par le bon placement de uid_attr_map à la racine (voir config validée). Avant correctif, contournement : ssh 'testkanidm@beafrancois.fr'@localhost.# 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 :
~/kanidm-cli person posix set-password testkanidm –name idm_adminperson 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.
kanidm-unixd online, connecté au serveurtestkanidm, plus de suffixe)/home/testkanidm → symlink vers /home/<uuid>)auth success! account success!)su, sudo su fonctionnelsUpdated cached pw)C'est le point bloquant pour l'objectif initial (login sans réseau).
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 ligneEn 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.
Updated cached pw) ont eu lieu après le dernier changementUpdated cached pw le confirmeaccount success en offline
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 ?
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.
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.
/home/<uuid> + symlink est le mode recommandé par Kanidm (home_attr = “uuid”)/home/francois existant : prévoir la migration du contenu vers le dossier UUID, ou une stratégie d'alias adaptéeuserdel sans -r) qu'après validation complète, PC par PCsudo 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