🧪Eigene Schemata
slapd.conf und ein LDIF für cn=config.📏Vier Regeln vorab
Nie fremde OIDs verwenden oder „ausleihen“. Eine Private Enterprise Number der IANA ist kostenlos; darunter vergibst du selbst (z. B. .1 für Attribute, .2 für Klassen).
Der Admin Guide empfiehlt registrierte Namen oder das Präfix „x-“ (z. B. x-de-Firma-…). Mindestens ein einheitliches Firmenpräfix verhindert Kollisionen mit künftigen Standardschemata.
Zusätzliche Attribute für bestehende Personen gehören in eine AUXILIARY-Klasse. Eine neue STRUCTURAL-Klasse lässt sich einem Eintrag nachträglich nicht zuweisen, ohne ihn neu anzulegen.
Ohne EQUALITY kein Gleichheitsfilter und kein eq-Index; Integer ohne ORDERING kann nicht mit >= gesucht werden.
📚 Quellen: Admin Guide: Schema Specification · IANA: Private Enterprise Numbers · RFC 4512 – LDAP: Directory Information Models
🧙Assistent
1️⃣ Schema und OID-Zweig
1.3.6.1.4.1.99999 ├── .1 Attributtypen .1.1 beispielMitarbeiterId, .1.2 beispielKostenstelle, .1.3 beispielVpnErlaubt └── .2 Objektklassen .2.1 beispielMitarbeiter
2️⃣ Attributtypen
3️⃣ Objektklassen
4️⃣ Prüfung
- ⚠️ Schema: OID-Präfix ist der Platzhalter 1.3.6.1.4.1.99999 – für den Produktivbetrieb eine eigene Private Enterprise Number (PEN) bei der IANA beantragen
- 💡 Schema: Der OpenLDAP Admin Guide empfiehlt, Namen bei der IANA zu registrieren oder mit „x-“ zu beginnen (z. B. x-de-Firma-…); mindestens ein einheitliches Firmenpräfix verhindert Kollisionen
5️⃣ Ergebnis
# beispiel.ldif – dasselbe Schema für cn=config (OLC)
# Laden: ldapadd -Y EXTERNAL -H ldapi:/// -f beispiel.ldif
dn: cn=beispiel,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: beispiel
olcAttributeTypes: ( 1.3.6.1.4.1.99999.1.1 NAME 'beispielMitarbeiterId'
DESC 'Interne Personalnummer'
EQUALITY integerMatch
ORDERING integerOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
SINGLE-VALUE )
olcAttributeTypes: ( 1.3.6.1.4.1.99999.1.2 NAME 'beispielKostenstelle'
DESC 'Kostenstelle, z. B. KST-4711'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{64} )
olcAttributeTypes: ( 1.3.6.1.4.1.99999.1.3 NAME 'beispielVpnErlaubt'
DESC 'Darf sich per VPN anmelden'
EQUALITY booleanMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
SINGLE-VALUE )
olcObjectClasses: ( 1.3.6.1.4.1.99999.2.1 NAME 'beispielMitarbeiter'
DESC 'Zusatzattribute für Mitarbeitende'
SUP top
AUXILIARY
MUST beispielMitarbeiterId
MAY ( beispielKostenstelle $ beispielVpnErlaubt ) )
Mit den Standardwerten geprüft: slaptest akzeptiert die Schemadatei, ldapadd -Y EXTERNAL lädt das LDIF in cn=config (OpenLDAP 2.7.1). slapd speichert Umlaute in DESC danach Base64-kodiert und nummeriert die Werte mit {0}, {1} …
6️⃣ Probe: das neue Schema benutzen
Dieses LDIF wird auf eine Kopie der Beispieldaten angewendet – mit Standardschema plus deinen Definitionen.
📚 Quellen: RFC 4512 – LDAP: Directory Information Models · RFC 4517 – LDAP: Syntaxes and Matching Rules · slapd-config(5) · Admin Guide: Configuring slapd (cn=config) · ldapmodify(1) · slaptest(8)
🏭Schema-Änderungen im laufenden Betrieb
Neue Attribute und Klassen kann man jederzeit mit ldapadd (neues Schema) oder ldapmodify (add: olcAttributeTypes an ein bestehendes Schema) ergänzen – ohne Neustart.
Eine bereits genutzte Definition umzudefinieren (Syntax, SINGLE-VALUE) kann vorhandene Einträge ungültig machen. Vorher mit slapschema prüfen, besser eine neue OID vergeben und die alte OBSOLETE markieren (RFC 4512).
Alle Server brauchen dasselbe Schema, bevor Einträge mit den neuen Attributen repliziert werden – sonst lehnt der Consumer sie ab. Schema also zuerst überall laden.
slapcat -n 0 sichert cn=config inklusive Schema, slapcat -n 1 die Daten. Eine OID, die einmal ausgeliefert wurde, wird nie für etwas anderes wiederverwendet.
dn: cn={3}beispiel,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.3.6.1.4.1.99999.1.4 NAME 'beispielEintritt'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 SINGLE-VALUE )cn={3}beispiel. Die Nummer vergibt slapd; mit ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn nachsehen, bevor man das Schema per ldapmodify ändert.📚 Quellen: Admin Guide: Configuring slapd (cn=config) · slapcat(8) · RFC 4512 – LDAP: Directory Information Models