Outils pour utilisateurs

Outils du site


commun:serveur_d_authentification_kanidm

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
  • 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.

  1. Compte de test : créer testkanidm (UID 5000, n'existe sur aucun PC) pour valider le login online puis offline sans risque
  2. Installer kanidm-unixd sur un PC de test (Debian, Ubuntu ou Arch — paquets natifs ou AUR)
  3. Valider le login online, puis couper le réseau et valider le login offline (cache)
  4. Bascule par PC : pour chaque vrai utilisateur, userdel sans -r (préserve le home), Kanidm prend le relais. Les UID identiques garantissent la cohérence des fichiers
  5. Chiffrement disque (LUKS) recommandé sur les portables : le cache offline stocke des credentials

Sécurité

  • Les comptes admin et idm_admin sont 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.fr selon le sous-domaine retenu pour LLDAP/Authelia
  • Supprimer le backup ~/kanidm-backup-*.tar.gz une 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.fr commenté + Caddy rechargé
  • [ ] DNS et backup conservés
  • [ ] Client portables et comptes laissés intacts
commun/serveur_d_authentification_kanidm.txt · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki