Outils pour utilisateurs

Outils du site


commun:serveur_d_authentification_lldap_sssd

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

commun:serveur_d_authentification_lldap_sssd [2026/06/23 05:22] – créée francoiscommun:serveur_d_authentification_lldap_sssd [2026/06/27 11:10] (Version actuelle) – francois
Ligne 1: Ligne 1:
-====== Serveur d'authentification : LLDAP + sssd ======+====== Serveur d'authentification LLDAP + configuration réseau ======
  
 Dernière mise à jour : juin 2026 Dernière mise à jour : juin 2026
  
-**Contexte :** remplace Kanidm (abandonné car l'authentification hors ligne ne fonctionnait pas). LLDAP fournit l'annuaire LDAP ; sssd côté portables fournit le login système avec cache offline éprouvé.+État : **opérationnel et validé** (login système en ligne ET hors ligne fonctionnels via sssd côté client — voir doc client).
  
-État : **serveur LLDAP déployé et fonctionnel (LDAPS chiffré)**. Reste à finaliser le schéma POSIX, le compte bind, et l'installation de sssd sur les portables.+Remplace Kanidm (abandonné : authentification hors ligne cassée). LLDAP = annuaire LDAP léger avec UI web. Le login système et le cache offline sont gérés côté client par sssd (doc séparée).
  
-===== Architecture =====+===== Architecture réseau =====
  
 <code> <code>
 Internet Internet
-   |  443+   |
    v    v
-[ Routeur OpenWrt ] 192.168.1.90+[ Routeur OpenWrt ] 192.168.1.90  (auth.beafrancois.fr pointe ici) 
 +   | redirections par port : 
 +   |   443  -> 192.168.1.25:443  (proxy Caddy)   [web autres services, zones wan/lan/invite] 
 +   |   6360 -> 192.168.1.9:6360  (serveur LLDAP)  [LDAPS, zones lan/invite]
    |    |
-   v  LAN1 /26+   └──(6360)─> [ Serveur LLDAP ] 192.168.1.9  (LDAPS direct, sssd) 
 [ Proxy Caddy ] 192.168.1.25 [ Proxy Caddy ] 192.168.1.25
-   |  reverse_proxy https://auth.beafrancois.fr -> 192.168.1.9:17170 (web admin) +   reverse_proxy HTTP : 
-   v +     ldap.beafrancois.fr -> 192.168.1.9:17170  (UI web LLDAP, tls internal)
-[ Serveur LLDAP ] 192.168.1.9 +
-   :3890   LDAP clair       (NON exposé : localhost serveur uniquement) +
-   :6360   LDAPS chiffré     (LAN /26 + wifi 192.168.115.0/24) +
-   :17170  Web admin (HTTP)  (via Caddy / proxy uniquement)+
  
-[ Portables ] LAN filaire 192.168.1.x + WiFi 192.168.115.x +[ Serveur LLDAP ] 192.168.1.9 (cahute) 
-   sssd -> ldaps://auth.beafrancois.fr:6360  (chiffré, CA auto-signé) +   :3890   LDAP clair    (NON exposé : interne serveur uniquement) 
-   login offline via cache sssd (illimité)+   :6360   LDAPS chiffré  (cert auto-signé, pour sssd — atteint via routeur:6360) 
 +   :17170  UI web (HTTP)  (atteint via Caddy / ldap.beafrancois.fr) 
 + 
 +Séparation des deux noms : 
 +   auth.beafrancois.fr  = le LDAP lui-même (LDAPS 6360, pour sssd) 
 +                          -> routeur:6360 -> serveur .9:6360 
 +   ldap.beafrancois.fr  = l'UI web d'administration 
 +                          -> proxy .25 -> serveur .9:17170 
 + 
 +[ Portables ] LAN filaire 192.168.1.0/26 + WiFi invité 192.168.115.0/24 
 +   sssd -> ldaps://auth.beafrancois.fr:6360   (= routeur:6360 -> serveur)
 </code> </code>
  
 **Réseaux :** **Réseaux :**
   * LAN filaire : 192.168.1.0/26 (serveur .9, proxy .25, routeur .90)   * LAN filaire : 192.168.1.0/26 (serveur .9, proxy .25, routeur .90)
-  * WiFi séparé : 192.168.115.0/24 (isolé du LAN et du WAN) +  * WiFi invité : 192.168.115.0/24 (isolé) 
-  * Tous les portables joignent LLDAP via le nom ''auth.beafrancois.fr'' +  * **''auth.beafrancois.fr''** = le **LDAP** (LDAPS). Résout vers le routeur (.90), qui relaie le 6360 vers le serveur. Ne sert PAS au web. 
- +  * **''ldap.beafrancois.fr''** = l'**UI web** d'administration. Résout vers le proxy (.25, DNS local), qui reverse-proxy vers LLDAP:17170 (''tls internal''). 
-===== Pourquoi LLDAP + sssd plutôt que Kanidm ===== +  * Le LDAPS ne passe **PAS** par Caddy (Caddy ne fait que du HTTP) : le routeur relaie directement le 6360 vers LLDAP.
- +
-  * Kanidm : auth en ligne OK, mais **offline cassé** (signature ''hmac_s256'' -> Authentication Denied, voir doc Kanidm). Exigence fondamentale non remplie. +
-  * sssd : le cache offline est son métier depuis ~15 ans, éprouvé en production. C'est précisément le composant qui faisait défaut. +
-  * LLDAP : annuaire léger avec UI web, recommandé par Kanidm eux-mêmes comme alternative simple. +
-  * Contrepartie : 2 briques (LLDAP + sssd) au lieu d'une, et pas de SSO web natif (Authelia viendra par-dessus pour les services).+
  
-===== Déploiement serveur (FAIT) =====+===== Déploiement LLDAP (Docker) =====
  
 ==== Structure ==== ==== Structure ====
Ligne 51: Ligne 56:
     ├── lldap_config.toml      (généré au 1er démarrage)     ├── lldap_config.toml      (généré au 1er démarrage)
     ├── users.db               (base SQLite)     ├── users.db               (base SQLite)
-    ├── ca-cert.pem            (CA auto-signé) +    ├── ca-cert.pem / ca-key.pem    (CA auto-signé) 
-    ├── ca-key.pem             (clé du CA) +    ├── cert.pem / key.pem          (cert serveur LDAPS, CN=auth.beafrancois.fr) 
-    ├── cert.pem               (cert serveur LDAPS, CN=auth.beafrancois.fr) +    ├── san.ext
-    ├── key.pem                (clé serveur) +
-    ├── san.ext                (extension SAN)+
     └── secrets/     └── secrets/
         ├── jwt_secret         ├── jwt_secret
Ligne 61: Ligne 64:
 </code> </code>
  
-==== Génération des secrets ====+==== Secrets ====
  
 <code bash> <code bash>
Ligne 83: Ligne 86:
   -nodes -subj "/CN=auth.beafrancois.fr"   -nodes -subj "/CN=auth.beafrancois.fr"
  
-# Extension SAN+# SAN
 sudo tee san.ext > /dev/null <<'EOF' sudo tee san.ext > /dev/null <<'EOF'
 subjectAltName = DNS:auth.beafrancois.fr subjectAltName = DNS:auth.beafrancois.fr
Ligne 93: Ligne 96:
 </code> </code>
  
-Vérification LDAPS :+Vérification :
 <code bash> <code bash>
 openssl s_client -connect 192.168.1.9:6360 -CAfile .../ca-cert.pem < /dev/null 2>/dev/null \ openssl s_client -connect 192.168.1.9:6360 -CAfile .../ca-cert.pem < /dev/null 2>/dev/null \
Ligne 101: Ligne 104:
  
 ==== docker-compose.yml ==== ==== docker-compose.yml ====
- 
-Emplacement : ''/mnt/stockage/docker/compose/lldap/docker-compose.yml'' 
  
 <code yaml> <code yaml>
Ligne 133: Ligne 134:
 </code> </code>
  
-==== Règles UFW ====+Lancement : ''cd /mnt/stockage/docker/compose/lldap && docker compose up -d'' 
 +Version déployée : LLDAP 0.6.3. 
 + 
 +===== Pare-feu serveur (UFW) =====
  
 <code bash> <code bash>
-# LDAPS : LAN filaire /26 + wifi /24 +# LDAPS : /24 (PAS /26 !) + wifi invité /24 
-sudo ufw allow from 192.168.1.0/26 to any port 6360 proto tcp+# ⚠️ /24 nécessaire : le LDAPS arrive via le ROUTEUR (.90), qui est HORS du /26 
 +#    (le /26 s'arrête à .63). Une règle /26 bloque le trafic relayé par le routeur. 
 +sudo ufw allow from 192.168.1.0/24 to any port 6360 proto tcp
 sudo ufw allow from 192.168.115.0/24 to any port 6360 proto tcp sudo ufw allow from 192.168.115.0/24 to any port 6360 proto tcp
 # Web admin : via proxy Caddy uniquement # Web admin : via proxy Caddy uniquement
 sudo ufw allow from 192.168.1.25 to any port 17170 proto tcp sudo ufw allow from 192.168.1.25 to any port 17170 proto tcp
-# Port 3890 (LDAP clair) : NON ouvert (reste interne au serveur)+# Port 3890 (LDAP clair) : NON ouvert (interne au serveur)
 </code> </code>
  
-==== Reverse proxy Caddy (sur le proxy) ====+**⚠️ Piège vécu :** le LAN filaire est en ''/26'' (.1 à .62), mais le routeur ''.90'' est **hors** de cette plage. Comme le LDAPS d'''auth.beafrancois.fr'' est relayé **par le routeur**, la source vue par le serveur peut être ''.90''. Une règle UFW en ''/26'' bloque alors le LDAPS. **Utiliser ''/24'' pour le port 6360.** 
 + 
 +===== Reverse proxy Caddy ===== 
 + 
 +Caddy ne gère QUE l'UI web (HTTP). Le LDAPS d'''auth.beafrancois.fr'' ne passe pas par Caddy (voir architecture). 
 + 
 +Sur le proxy (/opt/proxy/Caddyfile) :
  
-Bloc dans le Caddyfile : 
 <code> <code>
-auth.beafrancois.fr {+# UI web LLDAP (cert interne, pas de Let's Encrypt car pas de DNS public) 
 +ldap.beafrancois.fr { 
 +    tls internal
     reverse_proxy 192.168.1.9:17170     reverse_proxy 192.168.1.9:17170
 } }
 </code> </code>
 +
 Recharge : ''docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile'' Recharge : ''docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile''
  
-LLDAP web parle HTTP simple : pas de ''tls_insecure_skip_verify'' nécessaire (contrairement à Kanidm).+Note : ''tls internal'' génère un certificat auto-signé Caddy (avertissement navigateur à accepter). Utilisé car ''ldap.beafrancois.fr'' n'a pas d'entrée DNS publique (Let's Encrypt échouerait avec NXDOMAIN).
  
-===== Comptes et groupes (FAIT) =====+===== Configuration OpenWrt (routeur .90) ===== 
 + 
 +==== Principe ==== 
 + 
 +''auth.beafrancois.fr'' résout vers le routeur. Le routeur redirige **par port** vers la bonne machine. Les services web internes sont résolus par **DNS local ciblé** (pas de redirection 443 globale qui casserait l'accès internet). 
 + 
 +==== Redirections de port (firewall) ==== 
 + 
 +Règles DNAT nécessaires, **par zone source** (wan + lan + invite) : 
 +  * **443** -> 192.168.1.25:443 (proxy) — une règle par zone 
 +  * **6360** -> 192.168.1.9:6360 (LLDAP) — zones lan + invite 
 +  * Cockpit 9090, git ssh 8329, etc. : redirections existantes conservées 
 + 
 +**⚠️ Piège rencontré :** une règle 443 avec uniquement ''src=wan'' casse l'accès web **interne**. Il faut des règles 443 aussi pour ''lan'' et ''invite'' (ou NAT loopback). 
 + 
 +==== Port admin du routeur déplacé ==== 
 + 
 +**⚠️ Piège majeur :** l'interface admin OpenWrt écoutait sur 443, donc la redirection 443 invité -> proxy coupait l'accès à l'admin du routeur. **Solution : déplacer l'admin sur 8443.** 
 + 
 +<code sh> 
 +uci del_list uhttpd.main.listen_https='0.0.0.0:443' 
 +uci del_list uhttpd.main.listen_https='[::]:443' 
 +uci add_list uhttpd.main.listen_https='0.0.0.0:8443' 
 +uci add_list uhttpd.main.listen_https='[::]:8443' 
 +uci commit uhttpd 
 +/etc/init.d/uhttpd restart 
 +</code> 
 +Admin routeur désormais : ''https://routeur:8443'' 
 + 
 +==== DNS local ciblé (dnsmasq) ==== 
 + 
 +**⚠️ Ne PAS faire de wildcard** ''/beafrancois.fr/...'' : ça casserait Gitea SSH (un nom ne peut pas résoudre vers 2 IP selon le protocole). Déclarer les services **un par un** : 
 + 
 +<code sh> 
 +uci add_list dhcp.@dnsmasq[0].address='/nuage.beafrancois.fr/192.168.1.25' 
 +uci add_list dhcp.@dnsmasq[0].address='/wiki.beafrancois.fr/192.168.1.25' 
 +uci add_list dhcp.@dnsmasq[0].address='/blog.beafrancois.fr/192.168.1.25' 
 +uci add_list dhcp.@dnsmasq[0].address='/musique.beafrancois.fr/192.168.1.25' 
 +uci add_list dhcp.@dnsmasq[0].address='/ldap.beafrancois.fr/192.168.1.25' 
 +uci commit dhcp 
 +/etc/init.d/dnsmasq restart 
 +</code> 
 + 
 +''auth.beafrancois.fr'' reste vers le routeur (.90) pour la redirection par port. 
 + 
 +===== Comptes et groupes (LLDAP) =====
  
 Base DN : ''dc=beafrancois,dc=fr''. Users sous ''ou=people'', groupes sous ''ou=groups''. Base DN : ''dc=beafrancois,dc=fr''. Users sous ''ou=people'', groupes sous ''ou=groups''.
  
-^ Groupe      ^ gidNumber              ^ Rôle ^ +==== Attributs POSIX — à créer manuellement ====
-| famille     | (GID serveur à reporter) | accès commun aux 4 users | +
-| partage     | (GID serveur)            | partage /export/partage | +
-| multimedia  | (GID serveur)            | partage /export/multimedia |+
  
-^ Utilisateur ^ uidNumber ^ Identifiant ^ +**⚠️ LLDAP n'a PAS d'attributs POSIX par défaut.** L'UUID affiché dans l'UI n'est PAS le uidNumber. Créer manuellement dans le schéma (UI : section Schema) : 
-| François    | 1000 | francois | +  * **Schéma User :** ''uidNumber'', ''gidNumber'', ''homeDirectory'' (+ ''unixShell'' optionnel) 
-| Béatrice    | 1001 | beatrice | +  * **Schéma Group :** ''gidNumber''
-| Corentin    | 1002 | corentin | +
-| Louis       | 1003 | louis | +
-| **Test**    | 5000 | testldap (groupe famille, pour validation) |+
  
-Les UID/GID matchent les comptes locaux existants sur les PC (cohérence des partages NFS).+Puis remplir ces attributs pour chaque user et groupe.
  
-Connexion admin : ''https://auth.beafrancois.fr'' — user ''admin'', mot de passe = contenu de ''secrets/ldap_user_pass''.+==== Modèle de groupes retenu ====
  
-===== RESTE À FAIRE (reprise) =====+**Groupe primaire partagé** (modèle simple, validé). Tous les users ont ''famille'' comme groupe primaire. **PAS de groupes privés par utilisateur, PAS de auto_private_groups** (voir piège MPG dans la doc client).
  
-==== 1. Schéma POSIX dans LLDAP ⚠️ CRUCIAL ====+^ Groupe      ^ gidNumber ^ Rôle ^ 
 +| famille     | 302       | groupe primaire de tous les users + accès partages communs | 
 +| partage     | (GID serveur) | partage /export/partage | 
 +| multimedia  | (GID serveur) | partage /export/multimedia |
  
-LLDAP n'a **pas** d'attributs POSIX par défaut. L'UUID affiché dans l'UI n'est PAS le uidNumber. sssd a besoin des vrais attributs POSIX, à **créer manuellement** dans le schéma LLDAP (UI : section Schema/Attributes).+^ Utilisateur ^ uidNumber ^ gidNumber (primaire) ^ 
 +| francois    | 10000 | 302 (famille) | 
 +| beatrice    | 10001 | 302 | 
 +| corentin    | 10002 | 302 | 
 +| louis       | 10003 | 302 | 
 +| testldap    | 15000 | 302 |
  
-**Schéma User — ajouter :** +**Plage UID haute (10000+) choisie** pour éviter toute collision avec les comptes locaux (1000-9999) sur les portables. Implique un ''chown'' des homes existants lors de la bascule (voir doc client).
-  * ''uidNumber'' (entier) +
-  * ''gidNumber'' (entier) +
-  * ''homeDirectory'' (chaîne) — mettre le chemin réel ex. ''/home/francois'' +
-  * ''unixShell'' (chaîne, optionnel)+
  
-**Schéma Group — ajouter :** +Note : les objectClass réels dans LLDAP — user = ''inetOrgPerson/posixAccount/mailAccount/person'' ; groupe = ''groupOfNames/groupOfUniqueNames'' (PAS posixGroup). Important pour le mapping sssd.
-  * ''gidNumber'' (entier)+
  
-Puis **remplir** ces attributs pour chaque user et groupe (valeurs du tableau ci-dessus). +==== Compte bind (lecture seule) ====
-Note : ''unixShell'' et ''sshPublicKey'' sont optionnels ; tous les autres doivent être renseignés pour chaque user/groupe utilisé par sssd.+
  
-==== 2. Compte bind (lecture seule) ====+User ''binduser'' (DN : ''uid=binduser,ou=people,dc=beafrancois,dc=fr''), membre du groupe **''lldap_strict_readonly''**, SANS attributs POSIX (pas un compte loginnable). Sert à sssd pour interroger l'annuaire. Mot de passe stocké dans ''sssd.conf'' côté client.
  
-Créer dans LLDAP un user ''binduser'' membre du groupe **''lldap_strict_readonly''** (pas l'admin, pour limiter les droits). Noter son mot de passe → ira dans ''sssd.conf''.+===== Opérations courantes =====
  
-==== 3. Distribuer le certificat CA ====+Tout se fait via l'**interface web** : ''https://ldap.beafrancois.fr'' (UI d'administration), compte ''admin'' (mot de passe = ''secrets/ldap_user_pass''). Rappel : ''auth.beafrancois.fr'' est le LDAP lui-même (sssd), pas l'UI.
  
-Copier ''/mnt/stockage/docker/data/lldap/ca-cert.pem'' du serveur vers chaque portable (sssd doit faire confiance au CA auto-signé).+==== Ajouter un utilisateur ====
  
-==== 4. Installer sssd sur le portable Debian (lat7400) ====+  - **Create a user** : renseigner User ID (identifiant de login, ex. ''paul''), email (obligatoire, même interne), display name. 
 +  - Définir le **mot de passe** du compte (c'est lui qui servira au login système). 
 +  - Ouvrir la fiche du user et remplir les **attributs POSIX** (sinon sssd l'ignore) : 
 +    * ''uidNumber'' : prochaine valeur libre en plage haute (10004, 10005…) 
 +    * ''gidNumber'' : **302** (famille) — groupe primaire partagé, modèle retenu 
 +    * ''homeDirectory'' : ''/home/paul'' 
 +  - Ajouter le user comme **membre du groupe ''famille''** (et ''partage''/''multimedia'' selon les accès voulus).
  
 +**⚠️ Rappels :**
 +  * Le ''gidNumber'' primaire DOIT être 302 (un groupe existant). Ne PAS créer de groupe privé du même nom que le user (conflit MPG → casse le offline côté client).
 +  * Ne PAS réutiliser un uidNumber déjà pris. Vérifier : ''ldapsearch ... "(uidNumber=10004)"''.
 +
 +==== Changer le mot de passe d'un utilisateur ====
 +
 +Deux méthodes selon qui fait le changement.
 +
 +=== Par l'administrateur (interface web) ===
 +
 +Interface web : ouvrir la fiche du user → changer le mot de passe. Pas de contrainte particulière. Utile pour réinitialiser un mot de passe oublié.
 +
 +=== Par l'utilisateur lui-même (commande passwd) ===
 +
 +Sur son portable, l'utilisateur lance simplement :
 <code bash> <code bash>
-sudo apt install -y sssd sssd-tools libnss-sss libpam-sss libsss-sudo+passwd
 </code> </code>
 +Demande le mot de passe **actuel**, puis le nouveau (deux fois). Le changement est écrit directement dans LLDAP. **Validé et fonctionnel** (grâce à ''chpass_provider = ldap'' côté sssd).
  
-==== 5. Configurer sssd ====+**⚠️ Contraintes :** 
 +  * **Doit être EN LIGNE** (le portable doit joindre LLDAP en LDAPS). ''passwd'' écrit dans l'annuaire — impossible hors réseau. Hors ligne, la commande échoue. 
 +  * La commande standard ''passwd'' suffit, rien de spécial à installer. 
 +  * Le nouveau mot de passe est actif immédiatement en ligne ; le cache offline du portable se met à jour au login suivant.
  
-''/etc/sssd/sssd.conf'' (permissions 600), schéma rfc2307bis, basé sur l'exemple officiel LLDAP pour PAM. Points clés :+=== Propagation du cache offline (les deux méthodes) ===
  
-<code ini> +Après tout changement (web ou ''passwd''), côté **chaque autre portable** : le cache offline conserve l'**ancien** mot de passe jusqu'au prochain **login en ligne réussi** de cet utilisateur sur ce portable. Tant qu'il ne s'est pas reconnecté en ligne sur une machine donnée, l'ancien mot de passe y reste valable hors ligne.
-[sssd] +
-services = nss, pam +
-domains = beafrancois.fr+
  
-[domain/beafrancois.fr] +==== Supprimer / désactiver un utilisateur ====
-id_provider = ldap +
-auth_provider = ldap +
-chpass_provider = ldap +
-access_provider = permit +
-enumerate = True +
-cache_credentials = True +
-offline_credentials_expiration = 0    # OFFLINE ILLIMITÉ (exigence fondamentale)+
  
-ldap_uri = ldaps://auth.beafrancois.fr:6360 +  * **Supprimer** : fiche user → Delete. L'accès en ligne est coupé immédiatement. 
-ldap_schema = rfc2307bis +  * **⚠️ Offline :** un portable qui ne se reconnecte jamais garde le cache (donc l'accès) indéfiniment avec ''offline_credentials_expiration = 0''. Pour révoquer réellement un accès, il faut que le portable se reconnecte au moins une fois (sssd constate la suppression), ou intervenir sur le portable (''sss_cache -u paul'' / vider le cache). D'où l'intérêt de LUKS sur les portables.
-ldap_search_base = dc=beafrancois,dc=fr +
-ldap_default_bind_dn = uid=binduser,ou=people,dc=beafrancois,dc=fr +
-ldap_default_authtok = <mot de passe binduser> +
-ldap_tls_cacert = /etc/ssl/certs/lldap-ca.pem    # le ca-cert.pem copié +
-ldap_tls_reqcert = demand+
  
-# users +==== Ajouter un groupe ====
-ldap_user_search_base = ou=people,dc=beafrancois,dc=fr?subtree?(uidNumber=*) +
-ldap_user_object_class = posixAccount +
-ldap_user_name = uid +
-ldap_user_uid_number = uidNumber +
-ldap_user_gid_number = gidNumber +
-ldap_user_home_directory = homeDirectory +
-ldap_user_shell = unixShell+
  
-# groups +  - **Create a group** (ex. ''projets''). 
-ldap_group_search_base = ou=groups,dc=beafrancois,dc=fr?subtree?(gidNumber=*) +  - Remplir l'attribut POSIX **''gidNumber''** (valeur cohérente avec les permissions serveur si lié à un partage). 
-ldap_group_object_class = posixGroup +  - Ajouter les membres. 
-</code>+  - Côté serveur, créer le groupe Unix correspondant si besoin pour les partages (''groupadd -g <gid> projets'').
  
-Puis : +==== Gérer l'appartenance aux groupes ====
-<code bash> +
-sudo chmod 600 /etc/sssd/sssd.conf +
-sudo systemctl enable --now sssd +
-sudo pam-auth-update    # cocher "create home dir" + sss +
-</code>+
  
-==== 6. Valider (l'enjeu) ====+Fiche du groupe → ajouter/retirer des membres. Les groupes secondaires (''partage'', ''multimedia''…) sont gérés par appartenance ; le groupe **primaire** reste ''famille'' (302) via le ''gidNumber'' du user.
  
-  - Résolution : ''getent passwd testldap'' / ''id testldap'' +==== Après toute modification : rafraîchissement côté client ====
-  - Login en ligne : ''su - testldap'' puis ''ssh testldap@localhost'' +
-  - **Login OFFLINE** : se connecter une fois en ligne, couper le réseau, re-tester. **C'est le point qui a fait échouer Kanidm — le valider impérativement avant de basculer les vrais comptes.**+
  
-==== 7. Ne PAS désactiver kanidm-unixd avant validation ====+Les changements LLDAP sont pris en compte par sssd selon ses délais de cache. Pour forcer un rafraîchissement immédiat sur un portable : 
 +<code bash> 
 +sudo sss_cache -E              # invalide tout le cache (resync au prochain accès, en ligne) 
 +# ou ciblé : 
 +sudo sss_cache -u paul         # un user 
 +sudo sss_cache -g famille      # un groupe 
 +</code> 
 +(N'efface PAS les credentials offline, contrairement à ''rm'' du cache.)
  
-Garder le client Kanidm en place sur le portable jusqu'à ce que sssd soit validé (offline compris), comme filet de sécurité.+===== Vérifications utiles (depuis le serveur) =====
  
-===== Sécurité / notes =====+<code bash> 
 +# Test bind + lecture d'un user 
 +LDAPTLS_CACERT=/mnt/stockage/docker/data/lldap/ca-cert.pem LDAPTLS_REQCERT=allow \ 
 +ldapsearch -x -H ldaps://192.168.1.9:6360 \ 
 +  -D "uid=binduser,ou=people,dc=beafrancois,dc=fr" -W \ 
 +  -b "dc=beafrancois,dc=fr" "(uid=testldap)" uidNumber gidNumber homeDirectory 
 + 
 +# Vérifier les objectClass d'un user / groupe 
 +... "(uid=testldap)" objectClass 
 +... "(cn=famille)" objectClass gidNumber member 
 +</code>
  
-  * **offline_credentials_expiration = 0** (illimité) répond à l'exigence, mais : un portable volé et jamais reconnecté garde un cache valable indéfiniment. **Mitiger avec chiffrement disque LUKS** sur les portables. +===== Accès distant (hors LAN) — à faire =====
-  * Le port LDAP clair (3890) n'est jamais exposé hors du serveur ; seul le LDAPS (6360) l'est. +
-  * Compte bind en lecture seule (''lldap_strict_readonly''), pas l'admin. +
-  * Auth des serveurs (principal + proxy) : ne PAS passer par LLDAP/sssd — garder compte local + clé SSH. +
-  * WiFi 192.168.115.x : redirection spécifique à mettre en place pour joindre ''auth.beafrancois.fr''.+
  
-===== Accès distant (hors LAN) — à traiter séparément =====+**WireGuard** (prévu aussi pour les partages réseau). Le LDAPS reste fermé au WAN. Le cache offline sssd gère le "aucun réseau" ; WireGuard gère le "réseau distant" (rafraîchissement du cache + accès partages).
  
-Pour les portables hors LAN : **WireGuard** (prévu aussi pour les partages réseau). Le LDAPS reste fermé au WAN ; le offline sssd gère le "aucun réseau", WireGuard gère le "réseau distant" (provisionnement / rafraîchissement du cache). 
commun/serveur_d_authentification_lldap_sssd.1782192168.txt.gz · Dernière modification : de francois

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki