🧪Eigene Schemata

Reichen die Standardschemata nicht – etwa für eine Personalnummer, eine Kostenstelle oder ein VPN-Recht –, definierst du eigene Attributtypen und Objektklassen. Der Assistent erzeugt beide Formate: eine Schemadatei für slapd.conf und ein LDIF für cn=config.

📏Vier Regeln vorab

🆔
Eigene OIDs

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).

🏷️
Eindeutige Namen

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.

🧩
Lieber AUXILIARY

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.

⚖️
Matching-Regeln angeben

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

Starte mit dem Beispiel (Personalnummer, Kostenstelle, VPN-Recht als AUXILIARY-Klasse) und verändere es. Fehler und Warnungen erscheinen sofort.

1️⃣ Schema und OID-Zweig

⚠️ 1.3.6.1.4.1.99999 ist nur ein Platzhalter für diese Anleitung. Für echte Schemata eine eigene Private Enterprise Number kostenlos bei der IANA beantragen – so bleiben OIDs weltweit eindeutig.
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

Syntax
EQUALITY
ORDERING
SUBSTR
OID 1.3.6.1.4.1.99999.1.1
Syntax
EQUALITY
ORDERING
SUBSTR
OID 1.3.6.1.4.1.99999.1.2
Syntax
EQUALITY
ORDERING
SUBSTR
OID 1.3.6.1.4.1.99999.1.3

3️⃣ Objektklassen

Art
SUP
MUST (mit Komma)
MAY (mit Komma)
OID 1.3.6.1.4.1.99999.2.1

4️⃣ Prüfung

✅ Keine Fehler – bereit zum Laden
  • ⚠️ 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.

Modify0 success
uid=anna.schmidt,ou=people,dc=example,dc=org
Modify21 invalidAttributeSyntax
uid=ben.mueller,ou=people,dc=example,dc=org
additional info: beispielVpnErlaubt: value #0 invalid per syntax

📚 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

➕
Hinzufügen ist unkritisch

Neue Attribute und Klassen kann man jederzeit mit ldapadd (neues Schema) oder ldapmodify (add: olcAttributeTypes an ein bestehendes Schema) ergänzen – ohne Neustart.

✏️
Ändern mit Vorsicht

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).

🔁
Replikation beachten

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.

💾
Vorher sichern

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.

💡 Ein Attribut nachträglich ergänzen (cn=config)
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 )
⚠️ Den Index {n} kennen
In cn=config heißt das Schema nach dem Laden z. B. 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