Table des matières
Serveur d'authentification — Kanidm
Dernière mise à jour : juin 2026
Vue d'ensemble
Kanidm est le fournisseur d'identité centralisé de l'infrastructure. Il gère les comptes, les groupes, le login système des portables (via kanidm-unixd avec cache offline) et servira de backend LDAP pour les services web (Nextcloud, DokuWiki, etc.).
- Version : 1.10.3
- Conteneur :
kanidm/server:latest - Accès web : https://auth.beafrancois.fr
- Interface d'administration : CLI uniquement (l'interface web est réservée au self-service utilisateur)
Portable (online) --> kanidm-unixd --> Kanidm (auth + cache) Portable (offline) --> kanidm-unixd --> cache local chiffré Navigateur --> auth.beafrancois.fr (self-service : mot de passe, MFA) Service web (futur) --> LDAP --> Kanidm
Architecture réseau
Internet | 443 v [ Routeur OpenWrt ] NAT 443 -> proxy | v LAN1 [ Proxy Caddy ] 192.168.1.25 | reverse_proxy https://192.168.1.9:8443 (TLS interne auto-signé) v [ Serveur Kanidm ] 192.168.1.9 :8443 interface HTTPS (web + API) :3636 interface LDAPS (pour les services)
- Le serveur Kanidm utilise un certificat auto-signé en interne
- Caddy fait la terminaison TLS publique (Let's Encrypt) pour
auth.beafrancois.fr - Caddy accepte le certificat auto-signé de Kanidm via
tls_insecure_skip_verify
Configuration des machines annexes
DNS — OpenWrt
Une entrée DNS locale résout auth.beafrancois.fr vers l'IP du proxy Caddy (192.168.1.25), pour que la résolution fonctionne aussi sur le LAN.
Port forwarding — OpenWrt
- Le port 443 est déjà forwardé vers le proxy Caddy (192.168.1.25)
- La redirection pour l'accès externe à Kanidm sera activée une fois la validation locale terminée
Reverse proxy — Caddy
Sur le proxy, dans le Caddyfile (emplacement : /etc/caddy/Caddyfile dans le conteneur, projet dans /opt/proxy) :
auth.beafrancois.fr {
reverse_proxy 192.168.1.9:8443 {
transport http {
tls
tls_insecure_skip_verify
}
}
}
Recharger Caddy après modification :
cd /opt/proxy docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
Pare-feu — UFW (serveur principal)
Seul le proxy Caddy est autorisé à joindre Kanidm :
# Interface HTTPS sudo ufw allow from 192.168.1.25 to any port 8443 # Interface LDAPS (pour les services web, ex. Nextcloud) sudo ufw allow from 192.168.1.25 to any port 3636
Structure des fichiers
/mnt/stockage/docker/
├── compose/
│ └── auth/
│ └── docker-compose.yml
└── data/
└── kanidm/
├── server.toml ← configuration serveur
├── kanidm.db ← base de données
└── tls/ ← certificats auto-signés
├── ca.pem
├── cakey.pem
├── cert.pem
├── chain.pem
└── key.pem
docker-compose.yml
Emplacement : /mnt/stockage/docker/compose/auth/docker-compose.yml
services: kanidm: image: kanidm/server:latest container_name: kanidm restart: unless-stopped volumes: - /mnt/stockage/docker/data/kanidm:/data ports: - "192.168.1.9:8443:8443" - "192.168.1.9:3636:3636" environment: - RUST_LOG=info networks: default: name: auth_net
server.toml
Emplacement : /mnt/stockage/docker/data/kanidm/server.toml
domain = "beafrancois.fr" origin = "https://auth.beafrancois.fr" bindaddress = "0.0.0.0:8443" ldapbindaddress = "0.0.0.0:3636" db_path = "/data/kanidm.db" tls_chain = "/data/tls/chain.pem" tls_key = "/data/tls/key.pem" log_level = "info"
Permissions à appliquer (sinon Kanidm émet des avertissements de sécurité) :
sudo chmod 750 /mnt/stockage/docker/data/kanidm sudo chmod 640 /mnt/stockage/docker/data/kanidm/server.toml sudo chmod 640 /mnt/stockage/docker/data/kanidm/tls/key.pem sudo chmod 640 /mnt/stockage/docker/data/kanidm/tls/chain.pem
Mise en place initiale
1. Générer les certificats TLS auto-signés
sudo mkdir -p /mnt/stockage/docker/data/kanidm/tls docker run --rm -it \ -v /mnt/stockage/docker/data/kanidm:/data \ kanidm/server:latest \ kanidmd cert-generate -c /data/server.toml
2. Démarrer le serveur
cd /mnt/stockage/docker/compose/auth docker compose up -d docker compose logs -f kanidm
Attendre la ligne : ready to rock! 🪨 UI available at: https://auth.beafrancois.fr/
3. Initialiser les comptes break-glass
Deux comptes d'administration distincts (comptes de secours, pas pour usage quotidien) :
admin: gère la configuration de Kanidm (domaine, oauth2)idm_admin: gère les personnes et les groupes
docker exec -it kanidm kanidmd recover-account admin -c /data/server.toml docker exec -it kanidm kanidmd recover-account idm_admin -c /data/server.toml
Noter les mots de passe générés.
Client CLI
L'administration se fait via l'image séparée kanidm/tools. Un wrapper simplifie les commandes.
Configuration client
Fichier ~/.config/kanidm/config :
uri = "https://auth.beafrancois.fr" verify_ca = false
Wrapper
Fichier ~/kanidm-cli (rendu exécutable avec chmod +x) :
#!/bin/bash docker run --rm -it \ --network host \ -e KANIDM_URL="https://auth.beafrancois.fr" \ -e KANIDM_VERIFY_CA="false" \ --mount "type=bind,src=$HOME/.cache/kanidm_tokens,target=/root/.cache/kanidm_tokens" \ kanidm/tools:latest \ kanidm "$@"
Note : les variables d'environnement KANIDM_URL et KANIDM_VERIFY_CA sont utilisées car le montage du fichier de config dans le conteneur posait problème. Initialiser le cache de tokens avant la première connexion :
echo '{}' > ~/.cache/kanidm_tokens chmod 666 ~/.cache/kanidm_tokens
Connexion
~/kanidm-cli login --name idm_admin
La session reste valide un certain temps ; inutile de se reconnecter à chaque commande.
Gestion des comptes et groupes
Groupes
# Créer un groupe ~/kanidm-cli group create famille --name idm_admin ~/kanidm-cli group create partage --name idm_admin ~/kanidm-cli group create multimedia --name idm_admin # Lister les groupes ~/kanidm-cli group list --name idm_admin # Ajouter des membres ~/kanidm-cli group add-members famille francois beatrice corentin louis --name idm_admin # Lister les membres d'un groupe ~/kanidm-cli group list-members famille --name idm_admin
Personnes
# Créer une personne ~/kanidm-cli person create francois "François" --name idm_admin # Activer l'extension POSIX (login système) avec UID/GID forcé ~/kanidm-cli person posix set francois --name idm_admin --gidnumber 1000 # Définir le mot de passe POSIX (login système / sudo) ~/kanidm-cli person posix set-password francois --name idm_admin
Comptes et groupes configurés
| Groupe | Rôle |
|---|---|
| famille | Accès commun aux 4 utilisateurs |
| partage | Accès au partage /export/partage |
| multimedia | Accès au partage /export/multimedia |
| Utilisateur | UID/GID | Identifiant |
|---|---|---|
| François | 1000 | francois |
| Béatrice | 1001 | beatrice |
| Corentin | 1002 | corentin |
| Louis | 1003 | louis |
Les UID/GID Kanidm sont forcés pour correspondre aux UID locaux existants sur les PC, ce qui garantit la cohérence de propriété des fichiers (notamment sur les partages NFS) et évite toute casse lors de la bascule.
Plan de bascule des PC (à faire plus tard)
Principe : ne jamais supprimer les comptes locaux avant validation complète de Kanidm.
- Compte de test : créer
testkanidm(UID 5000, n'existe sur aucun PC) pour valider le login online puis offline sans risque - Installer
kanidm-unixdsur un PC de test (Debian, Ubuntu ou Arch — paquets natifs ou AUR) - Valider le login online, puis couper le réseau et valider le login offline (cache)
- Bascule par PC : pour chaque vrai utilisateur,
userdelsans-r(préserve le home), Kanidm prend le relais. Les UID identiques garantissent la cohérence des fichiers - Chiffrement disque (LUKS) recommandé sur les portables : le cache offline stocke des credentials
Sécurité
- Les comptes
adminetidm_adminsont des comptes break-glass : usage exceptionnel uniquement - Kanidm exposé vers Internet (provisionnement portables hors LAN) → MFA obligatoire (TOTP ou passkey)
- UFW limite l'accès à Kanidm au seul proxy Caddy
- Forcer les UID/GID ne crée pas de faille (les UID ne sont pas des secrets). Seul risque classique Unix : la réutilisation d'UID sur des fichiers orphelins — théorique avec 4 comptes stables
- Auth des serveurs (principal + proxy) : ne PAS passer par Kanidm. Garder un compte local + clé SSH, pour conserver l'accès même si Kanidm est indisponible
Commandes utiles
# État du conteneur cd /mnt/stockage/docker/compose/auth docker compose ps docker compose logs -f kanidm # Redémarrer docker compose restart kanidm # Mettre à jour docker compose pull docker compose up -d # Reset d'un compte break-glass (nécessite accès exclusif à la DB) docker exec -it kanidm kanidmd recover-account idm_admin -c /data/server.toml
Désactivation / suppression de Kanidm
Dernière mise à jour : juin 2026
Contexte : Kanidm est abandonné au profit de LLDAP + sssd, car l'authentification hors ligne (exigence fondamentale) ne fonctionne pas (auth refusée hors réseau malgré un credential caché — voir doc client Kanidm).
Principe : on désactive et on sauvegarde, on ne supprime pas définitivement tout de suite. La suppression réelle n'aura lieu qu'une fois LLDAP + sssd validé (offline inclus). Ça protège en cas de surprise avec la nouvelle solution.
Phase 1 — Désactivation (à faire maintenant)
Serveur
1. Sauvegarder les données Kanidm
sudo tar czf ~/kanidm-backup-$(date +%F).tar.gz -C /mnt/stockage/docker/data kanidm ls -lh ~/kanidm-backup-*.tar.gz
2. Arrêter le conteneur
cd /mnt/stockage/docker/compose/auth docker compose down
3. Mettre le compose de côté (ne pas supprimer)
mv /mnt/stockage/docker/compose/auth/docker-compose.yml \ /mnt/stockage/docker/compose/auth/docker-compose.yml.kanidm-disabled
4. Retirer les règles UFW (ports 8443 et 3636 vers le proxy)
sudo ufw status numbered # repérer les numéros des règles 8443 et 3636 sudo ufw delete <numero> # supprimer chaque règle (du plus grand numéro au plus petit)
Proxy (Caddy)
5. Retirer le bloc auth.beafrancois.fr du Caddyfile
Éditer le Caddyfile (commenter ou supprimer le bloc) :
# auth.beafrancois.fr {
# reverse_proxy 192.168.1.9:8443 {
# transport http {
# tls
# tls_insecure_skip_verify
# }
# }
# }
Puis recharger Caddy :
cd /opt/proxy docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
Ce qu'on conserve (à réaffecter)
- Entrée DNS OpenWrt
auth.beafrancois.fr→ garder, réutilisable pour la future stack d'auth (LLDAP/Authelia) - Entrée DNS hébergeur
auth.beafrancois.fr→ garder, idem - Backup
~/kanidm-backup-*.tar.gz→ conserver jusqu'à validation complète de LLDAP - Wrapper
~/kanidm-cli→ laisser (inoffensif, utile pour ré-exporter des données si besoin) - Docs DokuWiki Kanidm (serveur + client) → archiver, ne pas effacer (retour d'expérience utile)
Ce qu'on NE touche PAS encore
- Client kanidm-unixd sur les portables → laisser actif. Sera désactivé proprement au moment d'installer sssd, pas avant (pour ne pas se retrouver sans auth).
- Comptes et groupes → présents dans le backup, à recréer à l'identique dans LLDAP (UID 1000-1003 ; groupes famille, partage, multimedia).
Phase 2 — Suppression définitive (PLUS TARD, après validation LLDAP+sssd)
⚠️ Ne faire ces étapes qu'une fois LLDAP + sssd pleinement validé, offline compris, sur tous les portables.
Serveur
# Supprimer les données (le backup reste disponible si besoin) sudo rm -rf /mnt/stockage/docker/data/kanidm # Supprimer le dossier compose rm -rf /mnt/stockage/docker/compose/auth # Supprimer l'image Docker docker image rm kanidm/server:latest # Supprimer le wrapper CLI rm -f ~/kanidm-cli rm -rf ~/.config/kanidm ~/.cache/kanidm_tokens
Portables
# Désactiver et purger le client (APRÈS bascule vers sssd) sudo systemctl disable --now kanidm-unixd kanidm-unixd-tasks sudo apt remove --purge kanidm-unixd libnss-kanidm libpam-kanidm kanidm # Nettoyer la config résiduelle sudo rm -rf /etc/kanidm # Vérifier nsswitch.conf : retirer 'kanidm' des lignes passwd/group sudo nano /etc/nsswitch.conf # Relancer pam-auth-update pour retirer le profil Kanidm sudo pam-auth-update
Dépôt PPA (portables)
sudo rm -f /etc/apt/sources.list.d/kanidm_ppa.list sudo rm -f /etc/apt/trusted.gpg.d/kanidm_ppa.asc sudo apt update
DNS (une fois la nouvelle stack en place)
- Réaffecter ou supprimer
auth.beafrancois.frselon le sous-domaine retenu pour LLDAP/Authelia - Supprimer le backup
~/kanidm-backup-*.tar.gzune fois certain de ne plus en avoir besoin
Checklist rapide Phase 1
- [ ] Backup données Kanidm créé
- [ ] Conteneur arrêté (
docker compose down) - [ ] Compose renommé en
.kanidm-disabled - [ ] Règles UFW 8443 / 3636 retirées
- [ ] Bloc Caddy
auth.beafrancois.frcommenté + Caddy rechargé - [ ] DNS et backup conservés
- [ ] Client portables et comptes laissés intacts
