1. Einleitung
Da eine händische Einrichtung von Benutzern nur bis zu einem gewissen Grad skaliert, bietet Checkmk die Möglichkeit, LDAP-basierte Dienste für die Benutzerverwaltung zu nutzen. Sie sind damit in der Lage, automatisiert Benutzer aus diesen zentralen Verzeichnissen zu synchronisieren und ihnen, ebenfalls automatisiert, Kontaktgruppen, Rollen und andere Attribute in Checkmk zuzuweisen. Checkmk ist dabei nicht auf eine einzelne LDAP-Quelle eingeschränkt und kann die Benutzer bei Bedarf auch an andere verbundene Sites weiterverteilen.
2. Konfiguration einer LDAP Verbindung
2.1. Verbindung zum Server
Um zu einem LDAP-fähigen Server eine Verbindung herzustellen, benötigen Sie zunächst einen Benutzer, welcher Leserechte auf dem Server besitzt. Er muss mindestens Lesezugriff auf die Personen und Gruppen haben, welche er synchronisieren soll. In den folgenden Beispielen heißt dieser Benutzer check_mk.
Unter Setup > Users > LDAP connections > Add connection können Sie nun eine neue Verbindung anlegen. In der Eingabemaske vergeben Sie zunächst eine beliebige ID für die Verbindung in den General Properties. Optional können Sie hier unter Description einen leicht lesbaren Titel vergeben. Die ID muss wie immer eindeutig sein und kann später nicht mehr geändert werden.
Unter LDAP Connection werden nun der LDAP-Server und — falls vorhanden — einer oder mehrere Failover-Server definiert. Sie müssen nun noch den Directory Type auswählen und die Benutzerdaten für den Lesezugriff unter Bind Credentials definieren. Achten Sie darauf, dass der Benutzer mit seinem vollständigen LDAP-Pfad angegeben wird. Groß-/Kleinschreibung muss nicht beachtet werden. Ihre Konfiguration sollte nun etwa so aussehen:
Checkmk unterstützt nicht nur Active Directory. Um das Verzeichnis z.B. auf OpenLDAP zu ändern, wählen Sie es entsprechend in dem Feld Directory Type aus. Die weitere Konfiguration ändert sich dabei für Sie nur an wenigen Stellen.
Die Failover Servers werden benutzt, wenn der eigentliche Server nicht erreichbar ist oder eine Zeitbeschränkung überschritten wurde. Das ist sinnvoll, wenn Sie lokal über keinen eigenen Server verfügen, aber die Verbindung redundant aufbauen möchten.
Die Verbindung von Checkmk mit dem LDAP-Server wird immer so lange aufrechterhalten bis der LDAP-Server aufgrund eines Timeouts oder anderer Probleme nicht mehr erreichbar ist. Erst dann wird zum Failover-Server gewechselt. Das Gleiche gilt auch nach dem Wechsel: Die Verbindung wird erst dann wieder zurück zum eigentlich konfigurierten Server wechseln, wenn der Failoverserver nicht erreicht werden kann.
2.2. Benutzer definieren
Als Nächstes werden die Pfade zu den Benutzern und Gruppen bestimmt und Filter gesetzt. Geben Sie in User Base DN zunächst den Pfad an, unter dem die Benutzer zu finden sind. Achten Sie hier darauf, die Operational Unit (OU) so zu setzen, dass möglichst alle gewünschten Benutzer, aber möglichst wenig andere enthalten sind. Je mehr Benutzer abgefragt werden, desto langsamer wird die Synchronisation am Ende sein.
Danach setzen Sie die Option Search Scope. Sie können hier rekursiv nach allen Benutzern filtern, die sich in der OU und in den Units darunter befinden oder die Suche auf diejenigen einschränken, die sich nur direkt in dieser OU befinden. Falls Sie in dem Pfad einen Benutzer direkt angegeben haben, sollten Sie Search only the entry at the base DN auswählen. Es wird dann nur dieser Benutzer erfasst.
Sie können nun mithilfe der Option Search Filter die Auswahl der zu
importierenden Benutzer weiter einschränken. Wollen Sie z.B. nur Benutzer
synchronisieren, welche einer bestimmten Gruppe angehören, so setzen
Sie hier eine LDAP-Abfrage ein, wie in dem folgenden Screenshot zu
sehen. Voraussetzung dabei ist, dass die Benutzer über das Attribut
memberof
verfügen. Wie Sie ohne dieses Attribut nach einer
Gruppenzugehörigkeit filtern, erfahren Sie weiter unten:
Sie können den Standardfilter auch mit memberof
oder anderen Filtern
kombinieren:
(&(objectclass=user)(objectcategory=person)(memberof=cn=cmk-admins,ou=groups,dc=mycompany,dc=example))
Wie Sie unter Users sehen können, gibt es noch weitere Optionen bei der Benutzersuche. So ist es möglich mit der Option User-ID Attribute zu bestimmen, welches Attribut der Benutzer als Login ID in Checkmk benutzen wird. Mit diesem Login werden sich die Benutzer später anmelden. In der Regel wird dies bei Active Directory das Attribut sAMAccountName sein, welches auch als Standard in Checkmk genutzt wird. Unter OpenLDAP ist dies oft das Attribut uid.
Mit der Option Lower Case User-IDs können Sie die synchronisierten IDs in Kleinbuchstaben umwandeln. Das ist unter Umständen sinnvoll, da, wie bereits erwähnt, Active Directory/LDAP nicht zwischen Groß- und Kleinschreibung unterscheidet, Checkmk allerdings schon. Das kann zu Verwirrung führen, die durch diese Option gelöst wird.
Die Option Translate Umlauts in User-Ids ist nur noch aus Kompatibilitätsgründen vorhanden und sollte nicht mehr verwendet/verändert werden.
Zu guter Letzt bietet Ihnen die Option Create users only on login die Möglichkeit, neue Benutzer bei der Synchronisierung sondern erst bei Ihrem ersten Login in Checkmk anzulegen.
Die Option Filter Group sollte nur verwendet werden, wenn der LDAP-Server kein Active Directory ist und in den Benutzerdaten das dynamische Attribut memberof nicht verfügbar ist. Die Filterung der Benutzer erfolgt in diesem Fall in Checkmk selbst. Es werden dabei unter Umständen viele Benutzer abgefragt, welche später wieder verworfen werden. Ein solches Szenario kann das LDAP-Modul in Checkmk stark ausbremsen.
Sind Sie jedoch auf diese Option angewiesen, so wird hier der komplette Pfad zu der Gruppe eingetragen, nach der gefiltert werden soll:
2.3. Gruppen definieren
Falls Sie bei den Benutzern nach einer Gruppe filtern, richten Sie noch den Pfad zu der Gruppe ein, damit ein Abgleich stattfinden kann. Sie können hier in gleicher Weise vorgehen, wie bei den Benutzern: Wird eine Gruppe direkt angegeben, so kann unter Search Scope die Option Search only the entry at the base DN genommen werden. Ansonsten wird entweder in der OU direkt gesucht, oder die Units darunter werden ebenfalls einbezogen.
Und auch hier ist es mithilfe der Option Search Filter möglich zu bestimmen, wie der Name der Gruppe in Checkmk festgelegt wird. Zusätzlich können Sie angeben, wie das Attribut heißt (Member Attribute), in dem die Mitglieder der Gruppe hinterlegt sind. Standardmäßig verwendet Checkmk member. Unter OpenLDAP kann dies aber auch uniqueMember sein. Ändern Sie die Option dann entsprechend ab.
2.4. Testen der Konfiguration
Sie haben nun bereits die erste Einrichtung abgeschlossen und können zur Diagnose die Konfiguration über den entsprechenden Knopf am Ende der Seite speichern und testen:
Sie müssen keine Gruppen angeben, um eine funktionierende Konfiguration zu erhalten. Sofern sich aber in der OU nur Benutzer für Checkmk befinden, ist es sinnvoll die Auswahl über eine oder mehrere Gruppen einzuschränken.
2.5. Das Synchronisierungsintervall
Als Letztes können Sie noch definieren, wie oft die Benutzer automatisch synchronisiert werden sollen. In einer Umgebung, in der sich selten etwas ändert, ist der Standardwert vielleicht etwas zu eng gewählt. Das Zeitfenster sollte allerdings auch nicht zu weit gesetzt werden, damit Änderungen auch zeitnah in Checkmk abgebildet werden können.
Sie können die Synchronisation auch jederzeit manuell in Setup > Users > Users > Synchronize users anstoßen. Zusätzlich wird ein Benutzer auch bei Bedarf synchronisiert, wenn er versucht sich einzuloggen, aber noch nicht synchronisiert ist.
3. Automatische Zuordnung von Attributen
3.1. Kontaktgruppen
Es bringt leider nichts alle Benutzer automatisch anzulegen, wenn man diese danach manuell den Kontaktgruppen zuordnen muss. Checkmk bietet die Möglichkeit, die Gruppen des LDAP-Servers zu nutzen, um eine Zuordnung zu den Kontaktgruppen zu ermöglichen. Aktivieren Sie dafür die Option Attribute Sync Plugins > Contactgroup Membership:
Damit eine Zuordnung klappt, muss der Name (cn) der Gruppe auf dem LDAP-Server identisch mit dem in Checkmk sein, das heißt, die Kontaktgruppe oracle_admins wird nur korrekt einem Benutzer zugeordnet, wenn dieser auch im LDAP in der Gruppe oracle_admins ist. Ist er stattdessen in der Gruppe oracle-admins oder ORACLE_admins, so wird die Zuordnung nicht funktionieren. Achten Sie also auf die korrekte Schreibweise, falls es an dieser Stelle zu Problemen kommt.
Nested Groups
Checkmk bietet — im Moment nur für Active Directory — die Möglichkeit, auch vererbte Gruppen zu nutzen. Aktivieren Sie diese Option, wenn z.B. Ihr Benutzer in der Gruppe oracle_admins ist und diese Gruppe wiederum Mitglied in cmk-user .
Gruppen aus anderen Verbindungen
Wenn in Checkmk mehrere LDAP-Verbindungen eingerichtet wurden, können Sie auch Gruppen aus anderen Quellen benutzen, um eine Zuordnung zu ermöglichen. Das kann sinnvoll sein, wenn Sie eine allgemeine Verbindung konfiguriert haben und in den anderen nur auf bestimmte Gruppen filtern.
3.2. Rollen
Auch die Rollen sind in einer ähnlichen Weise automatisch zuordenbar, und die Funktion Nested Groups kann hier ebenfalls genutzt werden. Für jede Rolle können eine oder mehrere Gruppen definiert werden. Wählen Sie dafür die Rolle aus, zu der Sie eine Verknüpfung einrichten wollen und geben Sie den vollständigen Pfad zu der Gruppe an. Standardmäßig wird in den Gruppen gesucht, welche vom Gruppenfilter gefunden wurden. Sie können aber auch andere Verbindungen und die darüber gefundenen Gruppen nutzen. Wählen Sie dafür in der Liste die entsprechende Verbindung aus.
Alle Benutzer aus der angegebenen Gruppe werden nun der Rolle Administrator zugeordnet, sofern Sie durch den Benutzerfilter auch synchronisiert werden. Wie Sie in dem Screenshot sehen können, können Sie auch selbst konfigurierte Rollen auswählen und mit Gruppen aus dem LDAP verknüpfen.
3.3. Weitere Attribute
Für die Synchronisation von weiteren Benutzerinformationen braucht es in der Regel nur die die Aktivierung des jeweiligen Plugins unter Attribute Sync Plugins und eventuell der Angabe des Attributs, welches die Information bereitstellt. Nachfolgend eine Tabelle der Plugins, genutzten Attributen (wenn nicht manuell gesetzt) und Kurzbeschreibungen:
Plugin |
Attribut |
Syntax |
Mögliche Werte |
Beschreibung |
Alias |
cn |
String |
Normalerweise der Vor- und Nachname des Benutzers |
|
Authentication Expiration |
pwdlastset |
Interval |
Wann ein Benutzer ausgeloggt oder gesperrt wird |
|
Disable Notifications |
disable_notifications |
Boolean |
|
Deaktiviert alle Benachrichtigungen an den Benutzer |
Email address |
String |
Die E-Mail-Adresse des Benutzers |
||
Mega menu icons |
icons_per_item |
String |
|
Auswahl ob im Megamenü ein Eintrag pro Thema (None) oder pro Eintrag ( |
Navigation bar icons |
nav_hide_icons_title |
String |
|
Auswahl ob die Icons im Navigationsmenü beschriftet sein sollen ( |
Pager |
mobile |
String |
Eine hinterlegte Telefon-/Pagernummer |
|
Show more / Show less |
show_mode |
String |
|
Voreinstellung auf den "Show more"- bzw. "Show less"-Modus. Mit |
Sidebar position |
ui_sidebar_position |
String |
|
Auswahl auf welcher Seite ( |
Start-URL to display in main frame |
start_url |
String |
Beispiel: |
Welche View im rechten Frame angezeigt werden soll |
User interface theme |
ui_theme |
String |
|
Aussehen des User Interfaces für diesen Benutzer |
Visibility of Hosts/Services |
force_authuser |
Boolean |
|
Nur Hosts/Services anzeigen, für die man Kontakt ist |
4. LDAP in verteilten Umgebungen
Bei der Einrichtung einer verteilten Umgebung mit einer zentralen Konfiguration können Sie bestimmen, ob und welche LDAP-Verbindungen von der Remote-Instanz aus synchronisiert werden sollen. Wenn Sie nichts ändern, wird die Remote-Instanz alle Benutzer aus den konfigurierten Verbindungen selbst synchronisieren. Auf diese Weise werden Änderungen automatisch auf jeder Instanz innerhalb des definierten Intervalls abgebildet und müssen nicht erst von der Zentralinstanz zur Remote-Instanz kopiert werden. Sie können die Synchronisation aber auch auf bestimmte Verbindungen einschränken oder ganz abschalten. In letzterem Fall werden die Benutzer auf der Zentralinstanz aus den LDAP-Verbindungen abgerufen und bei einem Activate Changes auf die Remote-Instanzen kopiert.
Sie können die Einstellungen in Setup > General > Distributed Monitoring > Connection Properties konfigurieren. Hier ein Beispiel, bei dem die oben eingerichtete Verbindung ausgewählt wird:
5. LDAP mit SSL absichern
Um die LDAP-Verbindung mit SSL abzusichern, aktivieren Sie lediglich in
den Verbindungsdaten das Häkchen Use SSL und passen noch
den TCP Port an (bei LDAP über SSL üblicherweise 636
).
Sofern der oder die LDAP-Server ein Zertifikat nutzen,
welches von einer vertrauenswürdigen Zertifizierungsstelle signiert wurde,
ist damit bereits alles Nötige getan, um eine verschlüsselte
Verbindung aufzubauen.
Wenn Sie ein selbstsigniertes Zertifikat nutzen, wird der Verbindungsaufbau nur dann funktionieren, wenn Sie dieses noch in Ihren Zertifikatsspeicher importieren. Erst dann wird es als vertrauenswürdig eingestuft und die Verbindung aufgebaut.
Öffnen Sie dazu Setup > General > Global Settings > Site Management > Trusted certificate authorities for SSL. Klicken Sie hier auf Add new CA certificate or chain und kopieren Sie den Inhalt ihres Zertifikats entweder in das vorgesehene Feld oder wählen Sie Upload CRT/PEM File und laden Sie ihre PEM- oder CRT-Datei hoch.
6. Fehlerdiagnose
Eine Fehlerdiagnose ist in der Konfigurationseinrichtung
direkt implementiert. Auch nach der Einrichtung kann hier überprüft werden,
woher ein Problem kommen könnte. Zusätzlich werden Fehlermeldungen auch
in das web.log
geschrieben. Diese Meldungen können ebenfalls auf
die Fehlerquelle hinweisen:
2020-09-19 16:03:17,155 [40] [cmk.web 31797] /ldaptest/check_mk/wato.py Internal error: Traceback (most recent call last):
File "/omd/sites/ldaptest/share/check_mk/web/htdocs/wato.py", line 6563, in mode_edit_ldap_connection
state, msg = test_func(connection, address)
File "/omd/sites/ldaptest/share/check_mk/web/htdocs/wato.py", line 6506, in test_group_count
connection.connect(enforce_new = True, enforce_server = address)
File "/omd/sites/ldaptest/share/check_mk/web/plugins/userdb/ldap.py", line 274, in connect
('\n'.join(errors)))
MKLDAPException: LDAP connection failed:
ldap://myldap.mycompany.org: Can't contact LDAP server
7. Dateien und Verzeichnisse
Pfad | Bedeutung |
---|---|
|
In dieser Datei werden alle im Setup konfigurierten LDAP Verbindungen festgehalten. |
|
Alle Benutzer werden hier definiert. |
|
Die Logdatei, in der Verbindungsfehler aufgezeichnet werden. Es ist damit eine der ersten Quellen bei Problemen. |