Heyo!
In diesem Beitrag möchte ich darauf eingehen, wie man ein neues Schema in OpenLDAP 2.4+ hinzufügt. Warum? In der Version 2.4 hat sich die Konfiguration des OpenLDAP Servers verändert. Da ich kein LDAP-Experte bin, un ebenfalls nicht viel Dokumentation im Internet gefunden habe, schreibe ich zur Dokumentation diesen Artikel.
Die Konfiguration ab OpenLDAP 2.4 ist nur im LDIF-Format und folgt einem ziemlich logischen Schema:
+--- cn=config # Global config options
| +--- cn=module{0} # A set of modules
| +--- cn=schema # System schema
| | +--- cn={0}core # Core schema
| | +--- cn={1}cosine # Cosine schema
| | +--- cn={n}xyz # n schema
| +--- olcDatabase={1}mdb # database
Wie man sieht werden Schemas als Kind von cn=schema,cn=config erstellt. Vor dem Release 2.4 wurden alle .schema Dateien in der slapd.conf hinzugefügt. Seit Version 2.4 werden .schema-Dateien lediglich zum Beschreiben genutzt.
Für dieses Beispiel füge ich zwei objectClass sowie zwei Attribute für ein Nextcloud Schema hinzu. Das .schema Format ist relativ einfach zu verstehen und zu schreiben. Zuerst erstellen wir uns ein Arbeitsverzeichnis z.B. /tmp/ldapnxt.
mkdir /tmp/ldapnxt
Als nächstes erstellt man die Schema-Datei nextcloud.schema, die die Definition der neuen und benutzerdefinierten Attribute und den neuen objectClass enthält. Diese Datei wird in /etc/ldap/schema/ abgelegt.
Anschließend wird die Schema Datei in das neue LDIF Format umgewandelt und OpenLDAP hinzugefügt. Dafür wird eine temporäre Konfigurationsdatei erstellt und die zu konvertierenden Schemas included.
cd /tmp/ldapnxt
touch ldap.conf
echo "include /etc/ldap/schema/nextcloud.schema" > ldap.conf
slaptest -f ldap.conf -F .
Dadurch wird im aktuellen Verzeichnis ein Verzeichnis cn=config und eine Datei cn=config.ldif erstellt. Nun muss in ./cn=config/cn=schema/ die Datei cn={0}nextcloud.ldif bearbeitet werden.
Die Datei sollte so in der Art aussehen.
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 c751006f
dn: cn={0}nextcloud
objectClass: olcSchemaConfig
cn: {0}nextcloud
olcAttributeTypes: {0}( 1.3.6.1.4.1.49213.1.1.1 NAME 'nextcloudEnabled' DESC
'whether user or group should be available in Nextcloud' EQUALITY caseIgno
reMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.
15 SINGLE-VALUE )
olcAttributeTypes: {1}( 1.3.6.1.4.1.49213.1.1.2 NAME 'nextcloudQuota' DESC '
defines how much disk space is available for the user' EQUALITY caseIgnoreM
atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.49213.1.2.1 NAME 'nextcloudUser' DESC 'A
Nextcloud user' SUP top AUXILIARY MUST cn MAY ( nextcloudEnabled $ nextclou
dQuota ) )
olcObjectClasses: {1}( 1.3.6.1.4.1.49213.1.2.2 NAME 'nextcloudGroup' DESC 'A
Nextcloud group' SUP top AUXILIARY MUST cn MAY nextcloudEnabled )
structuralObjectClass: olcSchemaConfig
entryUUID: 4dccf540-9081-1039-9ee4-b5afb2184232
creatorsName: cn=config
createTimestamp: 20191031232417Z
entryCSN: 20191031232417.796053Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20191031232417Z
Jetzt die Datei bearbeiten und nur folgende Einträge behalten.
- dn: cn={0}nextcloud
- objectClass: olcSchemaConfig
- cn: {0}nextcloud
- alle olcAttributeTypes
- alle olcObjectClasses
Danach den Schlüssel dn und cn anpassen. Bei cn lediglich {0} entfernen. Bei dn auf den korrekten Pfad anpassen: cn=nextcloud,cn=schema,cn=config
dn: cn=nextcloud,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: nextcloud
olcAttributeTypes: {0}( 1.3.6.1.4.1.49213.1.1.1 NAME 'nextcloudEnabled' DESC
'whether user or group should be available in Nextcloud' EQUALITY caseIgno
reMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.
15 SINGLE-VALUE )
olcAttributeTypes: {1}( 1.3.6.1.4.1.49213.1.1.2 NAME 'nextcloudQuota' DESC '
defines how much disk space is available for the user' EQUALITY caseIgnoreM
atch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.4.1.49213.1.2.1 NAME 'nextcloudUser' DESC 'A
Nextcloud user' SUP top AUXILIARY MUST cn MAY ( nextcloudEnabled $ nextclou
dQuota ) )
olcObjectClasses: {1}( 1.3.6.1.4.1.49213.1.2.2 NAME 'nextcloudGroup' DESC 'A
Nextcloud group' SUP top AUXILIARY MUST cn MAY nextcloudEnabled )
Das wars! Jetzt nurnoch das Schema mit folgenden Befehl zum OpenLDAP-Server hinzuzufügen.
ldapadd -Q -Y EXTERNAL -H ldapi:/// -W -f './cn=config/cn=schema/cn={0}nextcloud.ldif' # Zum hinzufügen
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -W -f './cn=config/cn=schema/cn={0}nextcloud.ldif' # Zum modifizieren
Mit dem ldapsearch-Befehl kann man die Schemas jetzt überprüfen.
root@server:/tmp/ldapnxt# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config nextcloud
dn: cn=config
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: cn={4}core,cn=schema,cn=config
dn: cn={5}nextcloud,cn=schema,cn=config
dn: olcBackend={0}mdb,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}mdb,cn=config