LDAP-Anbindung einrichten#

Warnung

Für die Einrichtung der LDAP-Anbindung benötigen Sie derzeit root-Zugriff auf Ihren Server. Die Nutzung dieser Anleitung setzt grundlegende Kenntnisse über Begrifflichkeiten von LDAP voraus. Sollten Sie Unterstützung benötigen, wenden Sie sich bitte an unseren Kundendienst.

Um eigenen Diensten die Nutzung von LDAP zu erlauben, müssen Sie die Konfigurationsdatei /etc/iserv/ldapusers bearbeiten.

Warnung

Die Konfigurationsdatei wird von iconf verwaltet. Nach jeglichen Änderungen müssen Sie iconf save /etc/iserv/ldapusers ausführen, da eigene Einträge ansonsten bei der nächsten Ausführung von iservchk überschrieben werden.

Format der Konfigurationsdatei#

Hinweis

Weitere Hinweise zum Format der Konfigurationsdatei finden Sie im einleitenden Kommentar am Anfang.

Die Einträge in der Datei müssen einem der folgenden Formate entsprechen:

{username}:+{fieldName}:{client-ip-address}
{username}::{client-ip-address}
{username}:+{fieldName}
{username}

Alle Angaben in den geschweiften Klammern stellen Platzhalter dar und müssen durch passende Werte ersetzt werden.

Dabei entspricht {username} dem Common Name (CN) des Root-Distinguished-Names (Root-DN) der Zugangsdaten des Bind-Benutzers für den externen Dienst. Hier können Sie einen beliebigen Wert wählen. Benutzen Sie hier etwas, dass das System beschreibt, welches die LDAP-Datenbank des IServ nutzen soll. Zum Beispiel nas-sekretariat für ein NAS-Gerät.

Hinweis

Bitte beachten Sie, dass der Bind-Benutzer nur Lesezugriff auf das LDAP-Verzeichnis erhält. Das Editieren der Einträge, zum Beispiel für das Hinterlegen von Konfigurationseinstellungen, ist mit den Zugangsdaten nicht möglich.

Mit +{fieldName} können Sie bei Bedarf den Zugriff auf zusätzliche Attribute der Einträge im LDAP gestatten, die standardmäßig nicht freigegeben sind. Zum Beispiel können Sie durch die Angabe von +userPassword zusätzlich Zugriff auf den Passwort-Hash der IServ-Benutzer zulassen. Dies ist zum Beispiel notwendig, falls der Dienst, den Sie anbinden möchten, das Passwort des Benutzers selbst überprüft und deshalb Zugriff auf das Attribut benötigt. Mehrere zusätzliche Attribute können mit einem Komma getrennt angegeben werden. Wird diese Angabe weggelassen, erhält der Bind-Benutzer nur Zugriff auf allgemeine Informationen wie den Anzeigennamen (siehe Abschnitt „Verfügbare LDAP-Attribute“ unten).

Mit {client-ip-address} geben Sie die IP-Adressbereiche an, über die der angelegte Benutzer auf das LDAP-Verzeichnis zugreifen kann. An dieser Stelle werden IPv4- und IPv6-Adressen unterstützt. Wenn dieser Wert weggelassen wird, ist der LDAP-Benutzer nur lokal auf dem Portalserver und nicht über das Netzwerk nutzbar. Hier können entweder einzelne IP-Adressen wie 10.0.0.10 und 2001:db8:85a3:8d3::1 (empfohlen) oder auch bei Bedarf auch ganze IP-Adressbereiche im CIDR-Format (beispielsweise 10.0.0.0/8 und 2001:db8:85a3:8d3::/64) angegeben werden. Mehrere Werte werden mit einem Komma getrennt.

Verwenden Sie beispielsweise folgenden Eintrag, um den Benutzer nas-sekretariat anzulegen, ihm den Zugriff auf die Passwort-Hashes der IServ-Benutzer zu gestatten und den Zugriff von der IP-Adresse 10.0.0.10 zu erlauben:

nas-sekretariat:+userPassword:10.0.0.10

Hinweise zum Anlegen eigener Einträge in der Konfigurationsdatei#

Fügen Sie Ihre eigenen Einträge ausschließlich hinter dem Block

#
# Please add additional user definitions after this comment and remember to save
# the file with iconf save.
#

ein, um Konflikte mit künftigen Updates von IServ zu vermeiden. Die Einträge über diesem Block werden dynamisch vom System eingetragen und verwaltet. Sie sollten nicht verändert werden.

Übernehmen der Änderungen#

Speichern Sie Ihre Änderungen an der Konfigurationsdatei mit dem Befehl iconf save /etc/iserv/ldapusers. Führen Sie zum Übernehmen der Änderungen den Befehl iservchk ldap ferm aus. Dabei wird, sofern erforderlich, die Konfiguration der Firewall und des LDAP-Servers angepasst und letzterer gegebenenfalls neu gestartet.

Zugangsdaten für die Nutzung des LDAP-Servers#

Hinweis

Exemplarisch finden Sie im folgenden Abschnitt eine Liste der Begriffe und wie Sie die nötigen Werte für diese auslesen. Die Bezeichnungen entstammen einem exemplarischen Test-System. Die Bezeichnung im Konfigurationsdialog der Software, die für die Anbindung an den LDAP-Servers des IServs konfiguriert wird, kann möglicherweise abweichen.

  • LDAP-Server-Hostname: Hier sollte in der Regel die Domain Ihres IServs nutzbar sein, wenn die Software es erfordert, kann aber auch die IP-Adresse des Servers genutzt werden.

  • LDAP-Sicherheit: ldaps (LDAP mit SSL). Die Optionen ldap+tls (LDAP mit StartTLS) und ldap (LDAP ohne Verschlüsselung) werden nicht unterstützt.

  • LDAP-Port: 10636. Bitte beachten Sie: Der Standardport 636 ist momentan IServ-seitig für zukünftige Verwendung reserviert, daher ist der LDAP-Server über einen alternativen Port erreichbar. Wenn Ihre Software keine Möglichkeit besitzt, einen alternativen Port für LDAP anzugeben, wenden Sie sich bitte an uns.

  • Base-DN: Den vom LDAP-Server auf dem IServ genutzten Base-DN können Sie auf dem IServ aus der Datei /var/lib/iserv/server-openldap/ldapdn auslesen.

  • Root-DN (Bind-Benutzer): Dies ist der Benutzer, mit dem sich die Software gegen das LDAP-Verzeichnis authentifiziert. Der vollständige Root-DN lautet cn={username},ou=ldap,{basedn}. {username} ersetzen Sie mit dem Benutzernamen, den Sie in der Konfigurationsdatei eingetragen haben, den Wert für {basedn} können Sie wie beschrieben aus der Datei /var/lib/iserv/server-openldap/ldapdn auslesen. Bitte prüfen Sie in der Dokumentation Ihrer Software, ob der Base-DN in den Root-DN mit eingetragen werden muss oder ob die Eingabe der ergänzenden Werte genügt.

  • Root-DN-Kennwort (Bind-Kennwort): IServ generiert für jeden Bind-Benutzer, der in der Konfigurationsdatei eingetragen wird, nach einem Aufruf von iservchk ein sicheres Passwort. Dieses wird auf dem Server unter /var/lib/iserv/server-openldap/pwd/{username}.pwd gespeichert, wobei {username} dem Benutzernamen aus der Konfigurationsdatei entspricht.

  • Benutzer-DN: Der vollständige Benutzer-DN lautet ou=users,{basedn}. Bitte prüfen Sie in der Dokumentation Ihrer Software, ob der Base-DN in den Benutzer-DN mit eingetragen werden muss.

  • Gruppen-DN: Der vollständige Gruppen-DN lautet ou=groups,{basedn}. Bitte prüfen Sie in der Dokumentation Ihrer Software, ob der Base-DN in den Benutzer-DN mit eingetragen werden muss.

Objekt-Klassen#

IServ-Benutzer im LDAP-Verzeichnis gehören derzeit folgenden Objekt-Klassen an:

  • inetOrgPerson

  • memberOfGroup

  • organizationalPerson

  • person

  • posixAccount

  • shadowAccount

  • top

  • uuidObject

IServ-Gruppen im LDAP-Verzeichnis gehören derzeit folgenden Objekt-Klassen an:

  • groupOfMembers

  • inetOrgPerson

  • organizationalPerson

  • person

  • posixAccount

  • posixGroup

  • shadowAccount

  • top

  • uuidOject

Bemerkung

IServ-Gruppen besitzen auch die Objektklassen für Benutzer, da Gruppen bei IServ auf Systemebene einen gleichnamigen primären Unix-Benutzer besitzen.

IServ-Rollen im LDAP-Verzeichnis gehören derzeit folgenden Objekt-Klassen an:

  • organizationalRole

  • top

  • uuidObject

Bemerkung

Die Rollen sind eine IServ-spezifische Ergänzung, die von weitverbreiteten Standard-LDAP-Verzeichnisstrukturen etwas abweichen. Für die Filterung im LDAP-Verzeichnis können sie über das memberOf-Attribut bei den Benutzern entsprechend zu Gruppen als Filterkriterium verwendet werden. Zu finden sind die Rollen im LDAP-Verzeichnis unter dem DN ou=roles unterhalb des Base-DNs.

Verfügbare LDAP-Attribute#

Die folgenden Attribute sind über das LDAP-Verzeichnis abrufbar:

Benutzer#

  • cn: Common Name des Benutzers, entspricht bei IServ dem Unix-Benutzernamen.

  • dn: Distinguished Name des LDAP-Objektes (automatisch basierend auf dem Eintrag generiert).

  • departmentNumber: Das Feld Klasse/Zusätzliche Information aus der Benutzerverwaltung im Sinne einer Schulklasse/Abteilung (außer bei Benutzern mit der Rolle Lehrer, diese erhalten stattdessen das Feld initials).

  • employeeNumber: Die Import-ID des Benutzers, sofern vorhanden. Kann händisch in der Benutzerverwaltung eingetragen werden. Wird normalerweise durch das Import-Modul gesetzt.

  • employeeType: Der Import-Typ des Benutzers, sofern vorhanden. Dies stellt ein Freitextfeld dar- Kann händisch in der Benutzerverwaltung eingetragen werden. Wird normalerweise ausgehend vom verwendeten Importprofil durch das Import-Modul gesetzt.

  • gecos: Aus Vor- und Nachname zusammengesetzter vollständiger Name des Benutzers.

  • gidNumber: Die primäre Unix-Gruppen-ID des Benutzers.

  • givenName: Vorname des Benutzers.

  • homeDirectory: Unix-Heimatverzeichnis des Benutzers.

  • initials: Das Feld Klasse/Zusätzliche Information aus der Benutzerverwaltung im Sinne eines Lehrerkürzels (nur bei Benutzern mit der Rolle Lehrer, andere Benutzer erhalten stattdessen das Feld departmentNumber).

  • mail: Die IServ-E-Mail-Adresse des Benutzers.

  • memberOf: DNs der Gruppen und Rollen, in denen der Benutzer Mitglied ist.

  • loginShell: Unix-Shell des Benutzers, derzeit fest /usr/sbin/nologin.

  • objectClass: Die Objekt-Klassen des LDAP-Eintrags (siehe vorheriger Abschnitt).

  • shadowExpire: Gibt den Zeitpunkt an, an dem der Benutzerzugang abläuft. Wird nicht von der Weboberfläche ausgewertet.

  • shadowInactive: Gibt an, ob der Benutzer aktiviert oder deaktiviert wurde.

  • shadowLastChange: Letzte Änderung des Benutzer-Passwortes. 0 bedeutet an dieser Stelle, dass das Passwort noch nicht gesetzt wurde.

  • shadowMax: Relativer Zeitraum in Tagen nach einer Passwortänderung, an der das Passwort wieder geändert werden muss (Standardwert ist bei IServ immer 99999). Wird nicht von der Weboberfläche ausgewertet.

  • shadowMin: Relativer Zeitraum in Tagen nach einer Passwortänderung, an der das Passwort wieder geändert werden darf (Standardwert ist bei IServ immer 0). Wird nicht von der Weboberfläche ausgewertet.

  • shadowWarning: Relativer Zeitraum in Tagen vor einer nötigen Passwortänderung, an dem auf diese hingewiesen wird. Wird nicht von der Weboberfläche ausgewertet.

  • sn: Nachname des Benutzers.

  • uid: Unix-Benutzername des Benutzers

  • uidNumber: Die Unix-Benutzer-ID des Benutzers.

  • userPassword: Das gehashte Unix-Benutzerpasswort des Benutzers.*

  • uuid: Die IServ-UUID des Benutzers

* Attribut muss explizit in /etc/iserv/ldapusers für den Bind-Benutzer für Lesezugriff freigeschaltet werden (siehe oben).

Gruppen#

Bemerkung

Gruppen bestehen auch technischen Gründen aus zwei getrennten Einträgen.

Eigentliche Gruppe unterhalb von ou=groups:

  • cn: Common Name der Gruppe, entspricht bei IServ dem Unix-Gruppennamen.

  • description: Anzeigename der Gruppe

  • dn: Distinguished Name des LDAP-Objektes (automatisch basierend auf dem Eintrag generiert).

  • member: Die DNs der Gruppenmitglieder.

  • memberUid: Die Unix-Benutzernamen der Gruppenmitglieder.

  • uuid: Die IServ-UUID der Gruppe

Primäre Gruppen-Benutzer unterhalb von ou=users:

  • cn: Common Name der Gruppe, entspricht bei IServ dem Unix-Gruppennamen.

  • dn: Distinguished Name des LDAP-Objektes (automatisch basierend auf dem Eintrag generiert).

  • gecos: Name der Gruppe.

  • gidNumber: Die Unix-Gruppen-ID der Gruppe.

  • homeDirectory: Unix-Heimatverzeichnis der Gruppe.

  • loginShell: Unix-Shell des Gruppen-Benutzers, derzeit fest /bin/false.

  • mail: Die IServ-E-Mail-Adresse der Gruppe.

  • shadowExpire: Gibt den Zeitpunkt an, an dem der Zugang des primären Gruppen-Benutzers abläuft.

  • shadowInactive: Gibt an, ob der primäre Gruppen-Benutzer aktiviert oder deaktiviert wurde.

  • shadowLastChange: Letzte Änderung des Passwortes vom primären Gruppen-Benutzer. 0 bedeutet an dieser Stelle, dass das Passwort noch nicht gesetzt wurde.

  • shadowMax: Relativer Zeitraum in Tagen nach einer Passwortänderung, an der das Passwort des primären Gruppen-Benutzers wieder geändert werden muss (Standardwert ist bei IServ immer 99999).

  • shadowMin: Relativer Zeitraum in Tagen nach einer Passwortänderung, an der das Passwort des primären Gruppen-Benutzers wieder geändert werden darf (Standardwert ist bei IServ immer 0).

  • shadowWarning: Relativer Zeitraum in Tagen vor einer nötigen Passwortänderung, an dem auf diese hingewiesen wird.

  • sn: Name der Gruppe (sekundäres Attribut).

  • uid: Unix-Benutzername der Gruppe

  • uidNumber: Die Unix-Benutzer-ID des Gruppen-Benutzers.

  • userPassword: Das gehashte Unix-Gruppenpasswort der Gruppe. Wird nicht verwendet und von IServ nicht gesetzt.*

  • uuid: Die IServ-UUID der Gruppe

* Attribut muss explizit in /etc/iserv/ldapusers für den Bind-Benutzer für Lesezugriff freigeschaltet werden (siehe oben).

Rollen#

  • cn: IServ-interner Bezeichner der Rolle (Präfix ROLE_ zuzüglich des normalisierten Anzeigenamens).

  • dn: Distinguished Name des LDAP-Objektes (automatisch basierend auf dem Eintrag generiert).

  • description: Anzeigename der Rolle

  • uuid: Die IServ-UUID der Rolle

  • roleOccupant: Die DNs der Benutzer, denen diese Rolle zugewiesen ist.

Anbindung für einen Bind-Benutzer testen#

Der Bind-Benutzer kann wie folgt getestet werden:

Dabei sind folgende Variablen zu ersetzen:

BINDUSER="Bind-User aus /etc/iserv/ldapusers"
LDAPDN=$(cat /var/lib/iserv/server-openldap/ldapdn)
BINDPASSWORD=$(cat /var/lib/iserv/server-openldap/pwd/${BINDUSER}.pwd)

Beispiel:

BINDUSER="nas-sekretariat"
LDAPDN="dc=mein-iserv,dc=de"
BINDPASSWORD="TY14QGIEtbQKNWacC8wev1dXSk0TrfA1eLvSXKqFrpCtrwXpXaAT2UKtco73gd2x"

Die Daten, die dem Bind-Benutzer zur Verfügung gestellt werden, können mit folgenden Befehl direkt geprüft werden:

ldapsearch -o ldif-wrap=no -H ldaps://mein-iserv.de:10636  \
     -D "cn=${BINDUSER},ou=ldap,${LDAPDN}" \
     -w ${BINDPASSWORD} \
     -b "cn=${iservuser},ou=users,${LDAPDN}"

${iservuser} ist durch den Accountnamen eines beliebigen IServ-Benutzers zu ersetzen, dessen Daten exemplarisch angezeigt werden sollen.

Um die Daten für eine Gruppe exemplarisch auszugeben, kann folgender Befehl genutzt werden:

ldapsearch -o ldif-wrap=no -H ldaps://mein-iserv.de:10636 \
     -D "cn=${BINDUSER},ou=ldap,${LDAPDN}" \
     -w ${BINDPASSWORD} \
     -b "cn=${iservgroup},ou=groups,${LDAPDN}"

Dabei gelten dieselben Ersetzungen, wie beim vorherigen Befehl: Statt ${iservuser} muss hier allerdings ${iservgroup} durch den Accountnamen der IServ-Gruppe ersetzt werden.

Beispielausgaben#

mein-iserv.de ~ # ldapsearch -o ldif-wrap=no -H ldaps://mein-iserv.de:10636 \
     -D "cn=binduser,ou=ldap,$(cat /var/lib/iserv/server-openldap/ldapdn)" \
     -w $(cat /var/lib/iserv/server-openldap/pwd/binduser.pwd) \
     -b "cn=example.user,ou=users,$(cat /var/lib/iserv/server-openldap/ldapdn)"
# extended LDIF
#
# LDAPv3
# base <cn=example.user,ou=users,dc=mein-iserv,dc=de> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.user, users, mein-iserv.de
dn: cn=example.user,ou=users,dc=mein-iserv,dc=de
sn: User
uid: example.user
shadowInactive: -1
shadowMin: -1
shadowWarning: 7
shadowMax: 99999
homeDirectory: /home/example.user
givenName: Example
loginShell: /usr/sbin/nologin
uuid: 9152e072-c3c1-49d4-bcd6-e3ea50dae81d
shadowExpire: -1
shadowLastChange: 0
cn: example.user
gidNumber: 11453
userPassword:: e2NyeXB0fSE=
shadowFlag: 0
uidNumber: 11453
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: memberOfGroup
objectClass: uuidObject
objectClass: shadowAccount
gecos: Example User
mail: example.user@mein-iserv.de
memberOf: cn=examplegroup,ou=groups,dc=mein-iserv,dc=de

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
mein-iserv.de ~ # ldapsearch -o ldif-wrap=no -H ldaps://mein-iserv.de:10636 \
     -D "cn=binduser,ou=ldap,$(cat /var/lib/iserv/server-openldap/ldapdn)" \
     -w $(cat /var/lib/iserv/server-openldap/pwd/binduser.pwd) \
     -b "cn=examplegroup,ou=groups,$(cat /var/lib/iserv/server-openldap/ldapdn)"
# extended LDIF
#
# LDAPv3
# base <cn=examplegroup,ou=groups,dc=mein-iserv,dc=de> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# examplegroup, groups, mein-iserv.de
dn: cn=examplegroup,ou=groups,dc=mein-iserv,dc=de
objectClass: posixGroup
objectClass: top
objectClass: groupOfMembers
objectClass: uuidObject
cn: examplegroup
gidNumber: 1001
uuid: 30827b4f-db4c-4195-bbfb-8a3e392bb5b0
memberUid: example.user
member: cn=example.user,ou=users,dc=mein-iserv,dc=de

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1