Benutzer-/Gruppen-Synchronisierung
Bitte erstelle vor jeder Änderung an einer Schnittstelle/Import ein vollständiges Backup. Falls das Ergebnis nicht zufriedenstellend ist, kann dieses dann wiederhergestellt werden
Dieser Artikel zeigt dir, wie du Benutzer und Gruppen aus dem Active Directory gezielt in i-doit importierst. Der hier beschriebene Import erfolgt über den console.php-Befehl ldap-sync. Unabhängig davon wird ein Benutzer, der sich über LDAP anmeldet, in diesem Moment in i-doit angelegt, mit den Attributen aus dem LDAP-Mapping des Verzeichnisses. Am Ende des Artikels findest du ein komplettes Beispiel einer erweiterten Konfiguration.
Voraussetzungen:
- Du hast die grundlegende LDAP-/AD-Konfiguration bereits eingerichtet.
- Du verfügst über Grundkenntnisse im Bereich AD/LDAP.
In den folgenden Beispielen wird für Personen die objectClass = user und für Gruppen die objectClass = group verwendet. Wenn du nicht alle Benutzer oder Gruppen der Domaene synchronisieren möchtest, trage unter Nach Benutzern suchen in (OU) den DN/CN einer OU bzw. eines Containers ein.
Konfiguration der Filter#
Import von allen Benutzern#
Mit diesem Filter synchronisierst du ausschließlich Benutzer -- Gruppen werden dabei nicht erstellt:
1 | |
Import von Benutzern mit bestimmten Attributen#
Du kannst gezielt auf ein Attribut filtern. Im folgenden Beispiel wird nur der Benutzer synchronisiert, dessen sAMAccountName den Wert MichaelO hat:
1 | |
Import von allen Benutzern und allen Gruppen#
Dieser Filter erstellt sowohl Benutzer als auch Gruppen und weist die Benutzer den jeweiligen Gruppen zu:
1 | |
Import von Benutzern die Mitglied der Gruppe idoit-read sind#
Mit diesem Filter synchronisierst du nur Benutzer, die Mitglied der Gruppe idoit-read sind:
1 | |
Import von Benutzern die Mitglied der Gruppe idoit-read und idoit-write sind#
Dieser Filter synchronisiert nur Benutzer, die gleichzeitig Mitglied der Gruppen idoit-read und idoit-write sind:
1 | |
Import von Benutzern und Gruppen die unterhalb einer Nested Group sind#
Angenommen, du hast eine Gruppe idoit, in der die Gruppen idoit-read und idoit-write Mitglied sind. Mit diesem Filter legst du die untergeordneten Gruppen und deren Benutzer automatisch an.
Die übergeordnete Gruppe idoit selbst wird dabei nicht erstellt. Beachte, dass Gruppen in i-doit keine anderen Gruppen als Mitglied haben können.
1 | |
So filtere ich Benutzer mit mehr als einer objectClass#
Wenn sich die Benutzer dadurch unterscheiden, dass sie zwei objectClass-Attribute besitzen (z.B. person und user), baust du den Filter folgendermassen auf:
1 | |
Import von Benutzern, bei denen ein Attribut gefüllt ist#
LDAP kennt keinen leeren Wert. Ein Attribut ohne Inhalt existiert am Objekt schlicht nicht, du prüfst es deshalb mit dem Present-Filter =*. Im folgenden Beispiel werden nur Benutzer synchronisiert, bei denen company einen Wert hat:
1 | |
Die Negation liefert genau das Gegenteil, also nur Benutzer ohne Firma:
1 | |
So schließt du eine einzelne OU aus#
Eine OU lässt sich nicht über ihren Pfad ausschließen. Active Directory unterstützt keine Wildcards auf Attributen mit DN-Syntax, ein Filter wie (!(distinguishedName=*OU=Extern*)) liefert deshalb nie ein Ergebnis. Nutze stattdessen einen der folgenden Wege.
Trage unter Nach Benutzern suchen in (OU) die OU ein, die du synchronisieren möchtest, und schalte Rekursive Suche aus, damit untergeordnete OUs nicht gelesen werden.
Oder schließe die Objekte über die Gruppenmitgliedschaft aus:
1 | |
Oder über ein Attribut, das nur an diesen Objekten gesetzt ist:
1 | |
Welche weiteren Attribute über die ldap.ini importiert werden können#
Stelle sicher, dass du mit der ldap.ini-Konfiguration vertraut bist und die Attributerweiterungen bereits konfiguriert hast. Die folgenden Einstellungen nutzen den Abschnitt [additional] der .ini-Datei.
Die Konfiguration der Attributerweiterungen#
Die Konfiguration als Tabelle:
| Feldname | Attribut | Mapping mit |
|---|---|---|
| Feldname 1 | objectSid | Key: custom_1 |
| Feldname 2 | objectGUID | Key: custom_2 |
| Feldname 3 | - | Key: custom_3 |
| Feldname 4 | - | Key: custom_4 |
| Feldname 5 | - | Key: custom_5 |
| Feldname 6 | - | Key: custom_6 |
| Feldname 7 | - | Key: custom_7 |
| Feldname 8 | - | Key: custom_8 |
Benutzer statisch Räumen zuordnen#
In der ldap.ini kannst du feste Zuweisungen von Benutzern zu Räumen eintragen. Die Benutzer werden dann dem jeweiligen Raum als Kontakt zugewiesen. Existiert noch kein Raum mit diesem Titel, legt i-doit ihn an.
1 2 | |
Benutzer als Kontakt zu Räumen zuordnen#
Es ist möglich, über die Funktion import_rooms Personen als Kontakt zu Räumen zuzuordnen. Dazu muss die Option auf true gesetzt werden. Räume werden automatisch angelegt, allerdings ohne Standort.
1 2 3 | |
Die Anrede setzen lassen#
Um die Anrede beim Import automatisch zu setzen, konfiguriere die Option attributes[salutation]= in der .ini-Datei. Im folgenden Beispiel wird das AD-Attribut displayNamePrintable verwendet. Du kannst auch andere Attribute nutzen, solange diese im AD vorhanden sind.
Der Wert des Attributs displayNamePrintable könnte z.B. "Herr","Mr", "Mr." oder "Frau", "Mrs.", "Mrs", "Ms.", "Ms", "Miss" sein. Diese Werte können in der Verwaltung unter [Mandanten-Name] Verwaltung > Einstellungen für [Mandanten-Name] > LDAP Konfiguratiert werden.
1 | |
Diese Einstellung wurde im Beispiel der kompletten .ini Datei am Ende des Artikels mit aufgenommen.
So importiere ich Attribute aus dem LDAP#
Wenn du die Attributerweiterungen bereits konfiguriert hast, musst du als Nächstes die Konfigurationsdatei des LDAP-Sync (ldap.ini) anpassen.
Die verfügbaren Attribute findest du in deiner AD-Konfiguration. Eine Übersicht, welche Attribute zu welchem Feld gehören, findest du z.B. bei SelfADSI.
Das folgende Beispiel zeigt ein typisches Attribut-Mapping:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
In diesem Beispiel ist das Stammdaten-Attribut department mit dem gleichnamigen LDAP-Attribut gemappt. Zusätzlich wird die Attributerweiterung verwendet. Der Aufbau für z.B.
1 | |
funktioniert so:
attributes weist den Handler an, das i-doit-Attribut [custom_1] mit dem LDAP-Attribut objectSid zu synchronisieren. Nach der Synchronisation findest du folgende Stammdaten vor:
Weitere Optionen#
autoReactivateUsers#
Diese Einstellung setzt jeden bei der Synchronisation gefundenen Benutzer wieder auf den Status "normal". Das ist hilfreich, falls Benutzer versehentlich archiviert wurden.
Info
Für Active Directory passiert das ohnehin, die Option ist deshalb nur für NDS und OpenLDAP relevant. Grund ist, dass diese Verzeichnisse kein Kennzeichen für ein deaktiviertes Konto liefern, i-doit dort also nicht erkennen kann, ob ein Benutzer absichtlich deaktiviert wurde. Benutzer, die im Verzeichnis nicht mehr vorhanden sind, werden dagegen unabhängig vom Verzeichnistyp erkannt und über deletedUsersBehaviour behandelt.
1 | |
ignoreUsersWithAttributes#
Mit dieser Option verhinderst du die Synchronisation unerwünschter Verzeichnisobjekte. Die Prüfung läuft nach der LDAP-Suche, auf den Objekten, die der Filter geliefert hat.
ignoreFunction wird gegen jedes hier gelistete Attribut ausgeführt. Der Benutzer wird nur übersprungen, wenn die Funktion auf alle zutrifft. Sobald sie auf ein Attribut nicht zutrifft, wird der Benutzer synchronisiert.
Standardmäßig steht ignoreUsersWithAttributes=[], sodass nichts ignoriert wird.
Im folgenden Beispiel wird ein Benutzer zusammen mit ignoreFunction=empty nur dann übersprungen, wenn samaccountname, sn, givenname und mail gleichzeitig leer sind. Ein Benutzer mit leerem sn, aber gefülltem mail wird weiterhin synchronisiert:
1 2 3 4 | |
Soll ein Benutzer schon dann herausfallen, wenn eines von mehreren Attributen leer ist, gehört das in den LDAP-Filter der Server-Konfiguration:
1 | |
Übersprungene Benutzer erscheinen in der Ausgabe als Validation for <DN> failed: ignoreFunction prohibited syncing user., der Lauf geht mit dem nächsten Objekt weiter.
Info
Hier übersprungene Benutzer gelten anschließend als verwaist, weil sie in i-doit keinen aktuellen DN mehr tragen. Beim nächsten Lauf greift für sie deletedUsersBehaviour. Bereits importierte Personen, die erst später unter die Ignore-Regel fallen, werden also standardmäßig archiviert.
ignoreFunction#
Die Prüffunktion zum Ignorieren von Benutzern (siehe ignoreUsersWithAttributes). Entweder eines der folgenden Sprachkonstrukte oder ein beliebiger Funktionsname, der über call_user_func aufrufbar ist:
1 2 3 4 | |
empty wird als empty($value) ausgeführt. Fehlt das Attribut am Verzeichnisobjekt, ist der geprüfte Wert null.
Benutzer ohne Firma nicht synchronisieren:
1 2 | |
Benutzer mit gefüllter Firma nicht synchronisieren, also nur Personen ohne Firmenzuordnung importieren:
1 2 | |
Datensätze aussortieren, bei denen Firma und Abteilung gleichzeitig leer sind:
1 2 3 | |
Benutzer aussortieren, bei denen das Attribut gar nicht existiert, während ein vorhandenes, aber leeres Attribut durchgeht:
1 2 | |
Eigene Funktionen wirken umgekehrt
Bei einer über call_user_func aufgerufenen Funktion wird das Ergebnis negiert. Eine solche Funktion muss true zurückgeben, damit der Benutzer synchronisiert wird, während true bei den Sprachkonstrukten oben bedeutet, dass der Benutzer übersprungen wird. Aufgerufen wird sie als funktion($wert, $alleAttribute).
Synchronisiere leere Attribute#
Diese Option entscheidet, ob geleerte Attribute aus dem AD mit i-doit synchronisiert werden sollen oder nicht.
1 | |
defaultCompany#
Firma, die gesetzt wird, wenn über attributes[organization] kein Wert kam. Objekttitel oder Objekt-ID. Existiert kein Objekt mit diesem Titel, legt i-doit ein neues Objekt vom Typ Organisation an.
Schreibe den Wert ohne Anführungszeichen oder in doppelten Anführungszeichen. Einfache Anführungszeichen bleiben Teil des Werts und landen im Objekttitel. Einzige Ausnahme ist defaultCompany='', das vom Kommando in einen leeren Wert übersetzt wird.
1 | |
deletedUsersBehaviour#
Was mit Personen passiert, die im Verzeichnis nicht mehr gefunden werden.
| Wert | Wirkung |
|---|---|
archive | Das Objekt wird archiviert. Default, greift auch bei jedem unbekannten Wert. |
delete | Das Objekt bekommt den Status gelöscht. |
disable_login | Das Objekt bleibt normal, das Login wird deaktiviert. |
1 | |
disabledUsersBehaviour#
Was mit Personen passiert, deren Konto im Verzeichnis deaktiviert ist. Dieselben drei Werte wie oben, der Default ist ebenfalls archive.
Diese Option wird nur für Active Directory ausgewertet. OpenLDAP und NDS haben kein vergleichbares Kennzeichen, deaktivierte Konten werden dort nicht erkannt. Objekte, bei denen das Feld Konstante gefüllt ist, werden nie angefasst.
1 | |
Parameter-Referenz#
Die .ini-Datei wird mit -c übergeben, die Langform ist --config. Gelesen wird sie mit den Abschnitten [commandArguments], [commandOptions] und [additional]. ldap-sync hat keine Argumente, [commandArguments] bleibt also leer.
Werte werden wörtlich gelesen. Umschließende doppelte Anführungszeichen werden entfernt, einfache nicht, die bleiben Teil des Werts. true und false werden zu Booleans, [] wird zu einem leeren Array, und das wörtliche '' wird zu einem leeren String. Kommentare beginnen mit ;.
Um zu prüfen, was das Kommando tatsächlich eingelesen hat, rufe es mit --dumpConfig auf. Damit wird die geparste Konfiguration ausgegeben und das Kommando beendet sich, ohne zu synchronisieren.
Optionen in [commandOptions]#
| Option | Kurzform | Werte | Bedeutung |
|---|---|---|---|
user | -u | Login | i-doit-Benutzer für die Anmeldung. |
password | -p | Passwort | Passwort dieses Benutzers. |
tenantId | -i | Zahl, Default 1 | Mandanten-ID. |
ldapServerId | -l | Zahl | Nur diese eine LDAP-Server-Konfiguration synchronisieren. Ohne die Option laufen alle aktiven Konfigurationen durch. |
dumpConfig | Schalter | Geparste Konfiguration ausgeben und beenden. | |
connectionRankingActive | 0 oder 1 | Ändert sich der Status eines Personenobjekts, werden die Kategorieeinträge, die dieses Objekt referenzieren, auf denselben Status gesetzt. Der Default kommt aus der Mandanteneinstellung ldap.connection-ranking-active. | |
dropExistingRelations | 0 oder 1 | 1 löst bei einer LDAP-Gruppe alle Mitglieder, die nicht aus dem aktuellen Lauf stammen. Die Option ohne Wert zu setzen bedeutet ebenfalls 1. | |
archiveDeletedGroups | archive oder delete | Was mit Gruppen in i-doit passiert, die es im Verzeichnis nicht mehr gibt. Die Option ohne Wert bedeutet archive. Ohne die Option passiert nichts. | |
useDefaultTemplates | Schalter | Objekte, die der Lauf anlegt, also Personen, Personengruppen, Organisationen und Räume, werden aus der Standard-Objektvorlage ihres Objekttyps erzeugt, sofern eine definiert ist. |
Warning
connectionRankingActive, dropExistingRelations und archiveDeletedGroups gehören nach [commandOptions]. In [additional] haben sie keine Wirkung, weil die Kommando-Optionen sie überschreiben.
Optionen in [additional]#
| Parameter | Werte | Bedeutung |
|---|---|---|
attributes[<Feld>] | LDAP-Attribut | Bildet ein i-doit-Personenfeld auf ein Verzeichnisattribut ab. |
defaultCompany | Objekttitel oder ID | Firma für Benutzer ohne Firma aus dem Verzeichnis. |
syncEmptyAttributes | true / false | Ob geleerte Attribute nach i-doit geschrieben werden. |
deletedUsersBehaviour | archive / delete / disable_login | Personen, die es im Verzeichnis nicht mehr gibt. |
disabledUsersBehaviour | archive / delete / disable_login | Deaktivierte Konten, nur Active Directory. |
autoReactivateUsers | true / false | Setzt gefundene Personen wieder auf den Status normal. |
import_rooms | true / false | Legt Räume aus attributes[office] an und hängt die Person als Kontakt daran. |
rooms["<Raum>"] | JSON-Array | Statische Zuordnung von Benutzern zu Räumen. Fehlende Räume werden angelegt. |
ignoreUsersWithAttributes[] | Attributname | Attribute, die ignoreFunction prüft. |
ignoreFunction | empty / !empty / isset / !isset / Funktionsname | Prüffunktion zur Option darüber. |
Für attributes[...] sind diese Feldnamen gültig: academic_degree, city, custom_1 bis custom_8, department, description, fax, first_name, function, last_name, mail, organization, pager, personnel_number, phone_company, phone_home, phone_mobile, salutation, service_designation, street, title, zip_code.
Benutzername und die Gruppe für die Anmeldung werden nicht hier konfiguriert, sie kommen aus dem LDAP-Mapping des Verzeichnisses. Vorname, Nachname und E-Mail-Adresse stammen ebenfalls aus diesem Mapping, ein Eintrag in attributes[...] überschreibt sie aber.
Info
Der LDAP-Filter und der Basis-DN stehen ebenfalls nicht in dieser Datei. ldap-sync liest beide aus der Server-Konfiguration unter Verwaltung > Import und Schnittstellen > LDAP > Server.
Die komplette ldap.ini#
Hier findest du eine vollständige, anpassbare .ini-Datei. Der erste Teil basiert auf der Konfigurationsdatei für Console Commands.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
Damit die .ini Datei verwendet wird, muss diese mit dem -c parameter angegeben werden.
1 | |









