{ config, ... }: { # Zweite, eigenstaendige LLDAP-Instanz fuer den Identitaets-Stack auf # pinix. Bewusst mit **leerer, neuer Datenbank** -- kein Kopieren von # blunix' Verzeichnis. Damit gibt es kein Divergenzproblem zwischen zwei # parallel laufenden Verzeichnissen, aber auch keine Nutzer: bevor # Headscale hier per OIDC anmelden kann, muss der eigene Account neu # angelegt werden (Gruppen-Gate `intern` bewusst noch nicht aktiv, siehe # headscale.nix). # # Eigenes Admin-Passwort seit 13.09.2026 (secrets/pinixLldapAdmin.age): # anfangs wiederverwendete dieses Verzeichnis das mit blunix geteilte # lldapAdmin-Secret, was schlicht verwirrend war -- welches der beiden # Passwoerter hier gilt, war nicht ersichtlich. Getrennt, damit ein # Password-Rotieren auf der einen Seite nicht die andere anfasst. # # Das Branding von blunix' Instanz ist hier absichtlich nicht kopiert. # Es sind rund 100 Zeilen CSS-Overrides, die dupliziert sofort # auseinanderlaufen wuerden; beim Cutover gehoert die gebrandete # Paket-Derivation in ein gemeinsames Modul unter # hosts/globalServices/, aus dem beide Hosts importieren. services.lldap = { enable = true; settings = { # Enger gebunden als auf blunix, wo beides auf 0.0.0.0 laeuft: die # Web-UI erreicht nur Traefik auf diesem Host, und LDAP nur das # lokale Dex. Beides braucht keine erreichbare Adresse, und pinix' # Firewall oeffnet diese Ports ohnehin nicht. http_host = "127.0.0.1"; http_port = 17170; ldap_host = "127.0.0.1"; ldap_port = 3890; # Eigener Base DN, nicht config.ldapBaseDN: dieses Verzeichnis ist von # blunix' unabhaengig und replizierten nie. Unterschiedliche DNs # verhindern, dass ein Client versehentlich gegen das falsche # Verzeichnis bindet und scheinbar funktioniert. ldap_base_dn = config.ldapBaseDN2; ldap_user_dn = "admin"; ldap_user_mail = config.adminEmail; ldap_user_pass_file = "/run/credentials/lldap.service/ldap-user-pass"; force_ldap_user_pass_reset = "always"; }; }; # Wie auf blunix: systemd liest das root-eigene agenix-Secret und legt es # nur innerhalb des Dienstes ab. LoadCredential laeuft als root, bevor der # Dienst die Rechte abgibt. systemd.services.lldap.serviceConfig.LoadCredential = "ldap-user-pass:${config.age.secrets.pinixLldapAdmin.path}"; }