Outils pour utilisateurs

Outils du site


commun:serveur_d_authentification_kanidm

Ceci est une ancienne révision du document !


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
commun/serveur_d_authentification_kanidm.1782053456.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki