🧯Tipps & Fehlersuche
🔢Result-Codes
Mehr Treffer als erlaubt – es kommen trotzdem Teilergebnisse.
Ursache: olcSizeLimit (Standard 500) oder -z
Abhilfe: Paged Results (-E pr=500/noprompt) oder Limit für die Identität anheben (olcLimits)
Vertraulichkeit (Verschlüsselung) erforderlich.
Ursache: olcSecurity: tls=1 und der Client spricht Klartext – slapd meldet „TLS confidentiality required“
Abhilfe: StartTLS (-ZZ) oder ldaps:// verwenden
Attribut bzw. Wert ist im Eintrag nicht vorhanden.
Ursache: modify delete eines Werts, den es nicht gibt
Abhilfe: vorher lesen oder replace statt delete
Attributtyp im Schema unbekannt.
Ursache: Tippfehler oder Schema (z. B. nis/eigenes) nicht geladen
Abhilfe: Schema laden: ldapadd -Y EXTERNAL -H ldapi:/// -f schema.ldif
Einschränkung verletzt.
Ursache: SINGLE-VALUE mit mehreren Werten, ppolicy-Regel (Passwortqualität), slapo-unique/constraint
Wert existiert bereits.
Ursache: modify add eines vorhandenen Werts (z. B. member doppelt)
Abhilfe: Wert vorher prüfen oder ldapmodify -c
Wert passt nicht zur Syntax.
Ursache: Text in Integer-Attribut, unbekannte objectClass („objectClass: value #0 invalid per syntax“)
Abhilfe: Syntax prüfen, fehlendes Schema laden
Eintrag (oder Suchbasis) existiert nicht.
Ursache: Tippfehler im DN, falsche Suchbasis, Elterneintrag fehlt beim Add
Abhilfe: matchedDN in der Antwort zeigt den tiefsten existierenden Vorfahren
DN ist syntaktisch ungültig.
Ursache: nicht escaptes Komma, fehlendes „=“
Abhilfe: Sonderzeichen nach RFC 4514 escapen (\,)
Falsches Passwort oder unbekannter Bind-DN.
Ursache: Tippfehler im DN, Passwort falsch, Konto gesperrt (ppolicy)
Abhilfe: Bind-DN vollständig angeben (-D), -W statt -w im Skript prüfen
Keine ausreichenden Rechte (ACL).
Ursache: olcAccess erlaubt die Operation für diese Identität nicht
Abhilfe: ldapwhoami prüfen, slapacl simulieren, loglevel acl
Server verweigert die Operation.
Ursache: Schreiben ohne rootdn auf readonly-DB, unauthentifizierter Bind (DN ohne Passwort), Löschen eines Schemas in cn=config
Verstoß gegen Benennungsregeln.
Ursache: Wert des RDN per modify gelöscht (OpenLDAP: „naming attribute 'cn' is not present in entry“)
Abhilfe: Eintrag per modrdn umbenennen statt den Wert zu löschen
Eintrag verletzt die Objektklassen-Regeln.
Ursache: MUST-Attribut fehlt, Attribut nicht erlaubt (MAY), keine oder zwei strukturelle Klassen
Abhilfe: passende Hilfsklasse (AUXILIARY) ergänzen
Operation nur auf Blattknoten erlaubt.
Ursache: Eintrag mit Kindern löschen
Abhilfe: erst Kinder löschen (ldapdelete -r)
Eintrag existiert bereits.
Ursache: Add eines vorhandenen DN oder modrdn auf belegten Namen
Abhilfe: ldapmodify -c zum Überspringen, sonst modify statt add
📚 Quellen: RFC 4511 – LDAP: The Protocol · slapd-config(5)
🪜Vorgehen bei Fehlern
| Frage | Befehl | Worauf achten |
|---|---|---|
| Verbindung | ldapwhoami -x -H ldap://ldap.example.org -ZZ -D … -W | klappt TCP, TLS und Bind? |
| Wer bin ich? | ldapwhoami … | stimmt die Identität, mit der die ACLs geprüft werden? |
| Existiert es? | ldapsearch -x … -b "<dn>" -s base dn | 32 → Tippfehler im DN oder falsche Basis |
| Darf ich das? | slapacl -F /etc/openldap/slapd.d -D "<wer>" -b "<dn>" "mail/write" | 50 → Regel und Reihenfolge prüfen |
| Was sagt der Server? | olcLogLevel: stats (+ acl) | Log zeigt jede Operation mit Ergebnis |
| Passt das Schema? | slapschema -F /etc/openldap/slapd.d | 65/21/17 → Schema geladen? Syntax? |
📚 Quellen: ldapsearch(1) · slapacl(8) · slapd-config(5)
📇Indexe (olcDbIndex)
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: objectClass eq
olcDbIndex: uid eq
olcDbIndex: uidNumber eq
olcDbIndex: member eq
olcDbIndex: mail sub
olcDbIndex: cn sub
olcDbIndex: memberUid eqeq für Gleichheit (bei Integer-Attributen nutzt mdb geordnete Schlüssel, siehe index_intlen in slapd.conf(5)), sub für Sternchen-Suchen, pres für (attr=*). Über cn=config geändert, baut slapd die Indexe im Hintergrund neu auf; bei slapd.conf ist slapindex nötig (slapd-mdb(5)). Suchen ohne passenden Index meldet slapd im Log mit „… not indexed“.
📚 Quellen: slapd-mdb(5) · Admin Guide: Tuning
📋Loglevel
dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats
Die Werte sind Bitmasken für Subsysteme, keine steigende „Lautstärke“. Für den Betrieb empfiehlt slapd-config(5) stats; für Rechteprobleme kurz acl dazunehmen. Ohne Angabe (0) wird nichts protokolliert.
📚 Quellen: slapd-config(5)
🔒TLS
# Server (cn=config) – Pfade als Beispiel dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/ldap/ldap.example.org.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/ldap/ldap.example.org.key - replace: olcTLSProtocolMin olcTLSProtocolMin: 3.3 - replace: olcSecurity olcSecurity: tls=1 # Client (/etc/openldap/ldap.conf) URI ldap://ldap.example.org TLS_CACERT /etc/ssl/certs/ca-certificates.crt TLS_REQCERT demand
ldaps:// (Port 636) spricht von Anfang an TLS. StartTLS (-ZZ) beginnt unverschlüsselt auf Port 389 und wechselt per ExtendedRequest – mit -ZZ bricht der Client ab, wenn das scheitert; mit einfachem -Z macht er unverschlüsselt weiter.TLS_REQCERT demand ist der Standard und richtig – never schaltet die Prüfung ab und öffnet die Tür für Man-in-the-Middle.olcSecurity: tls=1 verlangt TLS für alle Operationen; Clients ohne TLS erhalten 13 confidentialityRequired. Für Verbindungen über ldapi:// setzt slapd standardmäßig eine SSF von 71 (olcLocalSSF).📚 Quellen: RFC 4513 – LDAP: Authentication Methods and Security Mechanisms · slapd-config(5)