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