Checkmk
to checkmk.com

1. Einleitung

In diesem Artikel zeigen wir Ihnen alles rund um Benutzerverwaltung und Berechtigungen in Checkmk. Doch bevor wir in die Details gehen können, müssen wir erst einige Begriffe klären.

Ein Benutzer (user) ist in Checkmk jemand, der Zugang zur Benutzeroberfläche hat. Er hat eine oder mehrere Rollen. Aus den Rollen ergeben sich Berechtigungen (permissions).

Sobald ein Benutzer für bestimmte Hosts und Services zuständig ist, wird er als Kontakt bezeichnet. Ein Kontakt sieht normalerweise nur seine eigenen Hosts und Services in der Monitoring-Umgebung und wird eventuell über Probleme benachrichtigt.

Es gibt auch Benutzer, die keine Kontakte sind. Ein Beispiel dafür ist cmkadmin, der beim Erzeugen einer Instanz automatisch angelegt wird. Dieser darf zwar alle Hosts und Services sehen, aber nur, weil in seiner Rolle admin die Berechtigung See all hosts and services enthalten ist und nicht, weil er für alles ein Kontakt wäre.

Wenn ein Kontakt nur zum Zwecke der Benachrichtigung angelegt wurde (z.B. zur Weiterleitung von Benachrichtigungen an ein Ticketsystem), dann kann es sinnvoll sein, ihn so anzulegen, dass kein Login in die Oberfläche möglich ist.

Ein Kontakt ist immer Mitglied von einer oder mehreren Kontaktgruppen. Der Zweck dieser Gruppen ist die Zuordnung von Kontakten zu Hosts und Services. Zum Beispiel könnte der Kontakt hhirsch in der Kontaktgruppe linux sein und diese wiederum per Regel allen Linux-Hosts zugeordnet. Eine direkte Zuordnung von Kontakten zu Hosts oder Services ist nicht möglich und würde in der Praxis auch Schwierigkeiten bereiten (z.B. beim Ausscheiden eines Benutzers).

Noch einmal zusammengefasst:

  • Benutzer können die Benutzeroberfläche verwenden.

  • Kontakte sind Benutzer, die für bestimmte Hosts und Services zuständig sind.

  • Kontaktgruppen legen fest, für was jemand zuständig ist.

  • Rollen legen fest, welche Berechtigungen jemand hat.

2. Benutzerverwaltung über die Konfigurationsumgebung

2.1. Übersicht

Die Benutzerverwaltung finden Sie unter Setup > Users > Users. In einer frisch angelegten Instanz sieht diese Seite so aus (Auszug):

Liste der Benutzer mit Eigenschaften des Administrators.

Sie sehen hier den einzigen Benutzer cmkadmin, welcher automatisch beim Erzeugen der Instanz angelegt wurde. Bei der Checkmk-Appliance kann dieser Benutzer anders heißen, da Sie dessen Namen und Passwort selbst festlegen. Dieser erste Benutzer hat folgende Eigenschaften:

  • Er hat die Rolle Administrator (admin) und damit alle Berechtigungen.

  • Er ist für nichts Kontakt und bekommt keine Benachrichtigungen.

  • Er darf trotzdem alles sehen (wegen seiner Rolle admin).

  • Das Passwort, das beim Erstellen der Instanz vergeben wurde, sollten Sie auf jeden Fall ändern!

Das Formular zum Anlegen eines neuen Benutzers mit button new user oder zum Editieren eines bestehenden Benutzers mit icon edit ist in fünf Abschnitte unterteilt. Im ersten geht es um die Identität:

2.2. Identität

Dialog für die Identität eines Benutzers.

Wie immer in Checkmk ist die ID eines Datensatzes (hier Username) später nicht änderbar. Sie wird für die Anmeldung verwendet und auch als interner Schlüssel in sämtlichen Dateien und Datenstrukturen.

Die E-Mail-Adresse ist optional und nur dann notwendig, wenn der Benutzer ein Kontakt werden soll, der per E-Mail benachrichtigt werden soll (SMTP-Konfiguration notwendig). Analog ist das Feld Pager address für die Benachrichtigung per SMS oder ähnliche Systeme vorgesehen. Wenn Sie eigene Benachrichtigungsskripte schreiben, können Sie auf die Werte in den Feldern zugreifen und sie für beliebige Zwecke verwenden.

Über Authorized sites dürfen Sie optional beschränken, auf welche der vorhandenen Instanzen zugegriffen werden darf. Praktisch ist das vor allem bei sehr großen Umgebungen, etwa einem verteilten Monitoring mit Hunderten von Instanzen: Sofern ein Benutzer nur einen Teil dieser Instanzen für seine Hosts benötigt, wird die GUI auch nur die autorisierten Instanzen kontaktieren, um Ansichten aufzubauen — was wiederum der Performanz enorm zugutekommt.

2.3. Sicherheit

Dialog für Sicherheitseinstellungen eines Benutzers.

Der zweite Kasten dient der Anmeldung und Berechtigung. Die Option Automation secret for machine accounts ist für Konten gedacht, die skriptgesteuert per HTTP auf Checkmk zugreifen und sich über die URL authentifizieren. Wie das geht, zeigen wir Ihnen weiter unten.

Bei den Rollen müssen Sie mindestens eine auswählen. Theoretisch können Sie einem Benutzer auch mehrere Rollen geben. Er bekommt dann die Rechte von allen diesen Rollen. Mit den drei vordefinierten Rollen (siehe weiter unten) macht dies jedoch wenig Sinn.

Wenn Sie einen Benutzer mit der Option disable the login to this account sperren, wird er in der Tabelle mit dem Symbol icon user locked dargestellt. Er kann sich dann nicht mehr anmelden, bleibt aber trotzdem im System erhalten. Falls er ein Kontakt ist, sind auch die Benachrichtigungen von der Sperre nicht beeinflusst und er wird weiterhin E-Mails etc. erhalten. War der Benutzer zum Zeitpunkt der Sperrung gerade angemeldet, so wird er automatisch abgemeldet.

2.4. Kontaktgruppen

Dialog für Kontaktgruppen eines Benutzers.

Sobald Sie einen Benutzer einer Kontaktgruppe oder mehreren zuordnen, wird dieser Benutzer zum Kontakt. Bei einer neuen Instanz wird automatisch die Kontaktgruppe Everything angelegt, die immer alle Hosts und alle Services enthält. Ein Benutzer in dieser Gruppe ist automatisch für alle Hosts und Services zuständig.

2.5. Benachrichtigungen

Dialog für Benachrichtigungseinstellungen eines Benutzers.

Im Kasten Notifications können Sie über die Option Receive fallback notifications festlegen, dass dieser Kontakt Benachrichtigungen bekommt, wenn keine Benachrichtigungsregel greift.

2.6. Persönliche Einstellungen

Dialog für persönliche Einstellungen eines Benutzers.

Alle Einstellungen in diesem Kasten kann der Benutzer über User > Edit profile auch selbst ändern (außer in der Rolle guest). Abgesehen von der Auswahl der Sprache der Oberfläche handelt es sich um selten benötigte Einstellungen. Details dazu finden Sie wie immer in der icon help Onlinehilfe.

2.7. Oberflächeneinstellungen

Dialog für Oberflächeneinstellungen eines Benutzers.

Auch die Oberflächeneinstellungen können Benutzer selbst über User > Edit profile anpassen. Besonders interessant ist die Option Set custom show mode zur Festlegung, ob Checkmk in der Oberfläche mehr oder weniger anzeigen soll. Wenn Sie immer alles sehen wollen, können Sie dies hier mit Enforce show more erzwingen.

3. Kontaktgruppen

3.1. Kontaktgruppen anlegen und editieren

Kontaktgruppen sind das Bindeglied zwischen Hosts und Services auf der einen und Kontakten auf der anderen Seite. Jede Kontaktgruppe repräsentiert eine Zuständigkeit für einen bestimmten Bereich in Ihrer IT-Landschaft. So könnte z.B. die Kontaktgruppe SAP alle Personen umfassen, die SAP-Systeme betreuen, und allen Hosts und Services zugeordnet sein, die Dienste in diesem Umfeld bereitstellen.

Die Kontaktgruppen verwalten Sie über Setup > Users > Contact groups. Folgende Abbildung zeigt dieses Modul mit vier angelegten Kontaktgruppen:

Liste der Kontaktgruppen.

Das Anlegen einer neuen Gruppe ist trivial. Wie immer ist die ID unveränderlich und der Alias ein Anzeigename, den Sie später jederzeit anpassen können:

Dialog für Name und Alias von Kontaktgruppen.

Die neue Kontaktgruppe ist erst einmal leer in doppelter Hinsicht: Sie enthält weder Kontakte noch Hosts oder Services. Die Zuordnung von Kontaktgruppen zu Kontakten geschieht über die Benutzerprofile, wie Sie schon beim Editieren des Benutzers gesehen haben.

Inventar-Sichtbarkeit festlegen

Zusätzlich können Sie die Sichtbarkeit des mit der Hardware-/Software-Inventur gefundenen Inventars festlegen. Standardmäßig ist das komplette Inventar sichtbar, es lässt sich aber auch komplett unterdrücken oder gezielt freischalten. Um beispielsweise ausschließlich einige ausgewählte Inventurdaten zum Prozessor sichtbar zu machen (Modell und Architektur), können Sie dies über die Option Allowed to see the following entries und die internen Inventur-Pfade erledigen.

Dialog für die Sichtbarkeit von Inventurdaten.

Um die geforderten Pfadinformationen eingeben zu können, müssen Sie diese zuerst aus den Inventurdaten auslesen. Gehen Sie dazu wie folgt vor:

Rufen Sie zunächst das HW/SW Inventory eines (betroffenen) Hosts auf und aktivieren Sie die Anzeige der internen Inventur-Pfade über Display > Modify display options und die Option Show internal tree paths.

Option zum Anzeigen der Inventur-Pfade.

Nun sehen Sie im Inventar selbst die internen Bezeichnungen, so heißt der interne Pfad für den Bereich Processor beispielsweise hardware.cpu. Die Bezeichnungen für CPU-Modell und -Architektur, model und arch, finden Sie darunter in den CPU-Daten.

Inventurdaten mit hervorgehobenen internen Pfaden.

Zurück im Bereich Permissions von Kontaktgruppen geben Sie nun den CPU-Pfad bei Path und die konkreten CPU-Datensätze bei Attributes an.

Dialog für die Sichtbarkeit von Inventurdaten mit CPU-Filter.

Das Resultat: Benutzer der Kontaktgruppe sehen nur noch ein abgespecktes Inventar:

Inventar mit ausgewählten Datensätzen.

3.2. Hosts in eine Kontaktgruppe aufnehmen

Zum Aufnehmen von Hosts in Kontaktgruppen gibt es zwei Methoden: über Ordner und über Regeln. Sie können auch beide Methoden kombinieren. In diesem Fall bekommt der Host dann die Summe der jeweiligen Kontaktgruppen zugeordnet.

Zuweisung über Ordner

Zu den Eigenschaften eines Ordners gelangen Sie über Folder > Properties während Sie im Ordner sind. Dort finden Sie die Option Permissions. Aktivieren Sie diese Checkbox, um zur Auswahl der Kontaktgruppen zu kommen:

Dialog zum Zuordnen von Kontaktgruppen zu Ordnern.

Der eigentliche Sinn dieser Option ist das Setzen von Berechtigungen für das Pflegen von Hosts, was wir weiter unten im Detail zeigen.

Sobald Sie Berechtigungen für bestimmte Kontaktgruppen vergeben, können Sie diese Gruppen im gleichen Zug wiederum als Kontaktgruppen für die Hosts im Monitoring eintragen lassen. Dabei können Sie entscheiden, ob die Zuordnungen auch für Hosts in Unterordnern gelten sollen und, ob die Services der Hosts ebenfalls explizit diese Gruppen bekommen sollen. Services ohne explizite Zuweisung erben nämlich alle Kontaktgruppen eines Hosts, auch solche, die durch Regeln zugewiesen wurden.

Achtung: Die Vererbung des Permissions-Attributs über die Ordner ist an dieser Stelle außer Kraft gesetzt. Dies erlaubt Ihnen, in Unterordnern weitere Kontaktgruppen hinzuzufügen. Die Zuordnung geschieht also kumulativ auch über alle Elternordner, falls in diesen die Option Add these groups as contacts in all subfolders aktiviert ist.

Übrigens finden Sie die Kontaktgruppenoptionen in vereinfachter Form auch direkt in den Details eines Hosts. Somit können Sie einzelnen Hosts auch hierüber Kontaktgruppen zuordnen. Da das aber schnell recht unübersichtlich werden kann, sollten Sie das nur in Ausnahmefällen tun und bei Bedarf eventuell lieber mit Regeln arbeiten.

Zuweisung über Regeln

Die zweite Methode — das Zuweisen von Kontaktgruppen über Regeln — ist etwas umständlicher, aber dafür deutlich flexibler. Und es ist sehr nützlich, wenn Sie Ihre Ordnerstruktur nicht nach organisatorischen Prinzipien aufgebaut haben und daher die Ordner nicht eindeutig Kontaktgruppen zuordnen können.

Den dafür nötigen Regelsatz Assignment of hosts to contact groups erreichen Sie über SSetup > Hosts > Host monitoring rules. In diesem Regelsatz finden Sie eine vordefinierte Regel, die beim Erzeugen der Instanz angelegt wurde und welche alle Hosts der Kontaktgruppe Everything zuweist.

Regelsatz für die Zuordnung von Hosts zu Kontaktgruppen.

Beachten Sie, dass dieser Regelsatz so definiert ist, dass alle zutreffenden Regeln ausgewertet werden und nicht nur die erste! Es kann nämlich durchaus nützlich sein, dass ein Host zu mehreren Kontaktgruppen gehört. In diesem Fall benötigen Sie für jede Zuweisung eine eigene Regel.

Dialog für die Zuordnung von Hosts zur Kontaktgruppe Windows-Servers.

3.3. Services in Kontaktgruppen aufnehmen

Es ist nicht immer sinnvoll, dass ein Service in den gleichen Kontaktgruppen ist wie sein Host. Daher können Sie über den Regelsatz Assignment of services to contact groups Services zu Kontaktgruppen zuordnen — unabhängig von den Kontaktgruppen des Hosts. Dabei gelten folgende Regeln:

  • Wenn einem Service keine Kontaktgruppe zugeordnet ist, erhält er automatisch die gleichen Kontaktgruppen wie sein Host.

  • Sobald einem Service mindestens eine Kontaktgruppe explizit zugeordnet ist, erbt er die Kontaktgruppen vom Host nicht mehr.

In einer einfachen Umgebung genügt es also, wenn Sie nur den Hosts Kontaktgruppen zuordnen. Sobald Sie mehr Differenzierung brauchen, können Sie auch Regeln für die Services anlegen.

3.4. Kontrolle der Zuordnung

Ob Sie alle Regeln und Ordner richtig konfiguriert haben, können Sie in den Details eines Hosts oder Services in der Monitoring-Umgebung überprüfen. Dort finden Sie die Einträge Host contact groups und Host contacts (bzw. Service contact groups und Service contacts), welche die letztendliche Zuordnung für dieses Objekt auflisten:

Liste mit Host-Details.

4. Sichtbarkeit von Hosts und Services

4.1. Übersicht

Die Tatsache, dass ein normaler Benutzer (Rolle user) nur solche Objekte sieht, für die er ein Kontakt ist, ist umso wichtiger, je größer Ihre Monitoring-Umgebung ist. Das sorgt nicht nur für Übersicht, sondern verhindert auch, dass Benutzer dort eingreifen, wo sie nichts zu suchen haben.

Als Administrator (Rolle admin) dürfen Sie natürlich immer alles sehen. Gesteuert wird das über die Berechtigung See all host and services. In Ihren persönlichen Einstellungen finden Sie die Checkbox Only show hosts and services the user is a contact for. Mit dieser können Sie das „Alles Sehen“ freiwillig aufgeben und sich nur noch die Hosts und Services anzeigen lassen, für die Sie ein Kontakt sind. Diese Option ist für Doppelrollen gedacht — also für jemanden, der gleichzeitig Administrator und auch normaler Benutzer ist.

Die Rolle guest ist so voreingestellt, dass auch ihre Benutzer alles sehen können. Ein Eingreifen oder persönliche Einstellungen sind hier deaktiviert.

Für normale Benutzer ist die Sichtbarkeit in der Monitoring-Umgebung so umgesetzt, dass sich das System so anfühlt, als wären die Hosts und Services, für die man nicht Kontakt ist, überhaupt nicht vorhanden. Unter anderem berücksichtigen folgende Elemente die Sichtbarkeit:

4.2. Sichtbarkeit von Services

Wie wir oben gezeigt haben, ist es möglich, dass Sie für einen Host Kontakt sind, aber nicht für alle seine Services. Trotzdem werden Sie in so einem Fall alle Services des Hosts in der GUI sehen können.

Diese Ausnahme ist so voreingestellt, weil das meistens nützlich ist. Das bedeutet in der Praxis z.B., dass die Kollegin, die für den Host an sich verantwortlich ist, auch solche Services sehen kann, die mit dem eigentlichen Host (Hardware, Betriebssystem etc.) nichts zu tun haben. Trotzdem erhält sie für diese keine Benachrichtigungen!

Wenn Ihnen das nicht gefällt, können Sie das umstellen über icon configuration Global settings > Monitoring Core > Authorization settings. Wenn Sie dort Hosts auf Strict - Visible if user is contact for the service umstellen, können Benutzer Services nur noch dann sehen, wenn sie direkt als Kontakt dem Service zugeordnet sind.

Dialog mit Autorisierungseinstellungen.

Das Ganze hat übrigens nichts damit zu tun, dass ein Service die Kontaktgruppen seines Hosts erbt, falls für ihn keine eigenen definiert sind. Denn dann wären Sie ja Kontakt für den Service (und würden auch deren Benachrichtigungen bekommen).

4.3. Host- und Service-Gruppen

Die zweite Option in der globalen Einstellung Authorization settings betrifft Host- und Service-Gruppen. Normalerweise können Sie eine Gruppe immer dann sehen, wenn Sie mindestens ein Element der Gruppe sehen können. Allerdings sieht die Gruppe dann für Sie aus, als würde sie auch nur die für Sie sichtbaren Element enthalten.

Ein Umschalten auf Strict - Visible if all members are visible macht alle Gruppen unsichtbar, in denen Sie für mindestens einen Host bzw. Service kein Kontakt sind.

Beachten Sie, dass diese beiden Einstellungen zur Sichtbarkeit keinen Einfluss auf die Benachrichtigungen haben.

5. Benachrichtigungen

Kontaktzuordnungen haben auch einen Einfluss auf die Benachrichtigungen. Checkmk ist so voreingestellt, dass im Falle eines Problems alle Kontakte des betroffenen Hosts oder Services benachrichtigt werden. Das geschieht durch eine Benachrichtigungsregel, die bei neuen Instanzen automatisch angelegt wird. Dies ist ein sehr sinnvolles Verhalten.

Trotzdem können Sie bei Bedarf die Regel anpassen oder durch weitere Regeln ergänzen, so dass Benachrichtigungen im Extremfall sogar ganz unabhängig von den Kontaktgruppen geschehen. Häufiger Grund dafür ist, dass ein Benutzer sich wünscht, bestimmte Benachrichtigungen nicht zu bekommen oder umgekehrt über Probleme bei einzelnen Hosts oder Services informiert zu werden, auch wenn er für diese nicht zuständig (und folglich kein Kontakt) ist.

6. Rollen und Berechtigungen

6.1. Vordefinierte Rollen

Checkmk vergibt Berechtigungen an Benutzer immer über Rollen — niemals direkt. Eine Rolle ist nichts anderes als eine Liste von Berechtigungen. Wichtig ist, dass Sie verstehen, dass Rollen das Niveau von Berechtigungen definieren und nicht den Bezug zu irgendwelchen Hosts oder Services. Dafür sind die Kontaktgruppen da.

Checkmk wird mit folgenden drei vordefinierten Rollen ausgeliefert, welche niemals gelöscht, aber beliebig angepasst werden können:

RolleBerechtigungenEinsatzzweck

admin

Alle Berechtigungen — insbesondere das Recht, Berechtigungen zu ändern.

Der Checkmk-Administrator, der das Monitoring-System an sich betreut.

user

Darf nur seine Hosts und Services sehen, in der Weboberfläche nur in für ihn freigegebenen Ordnern Änderungen machen und darf generell nichts machen, was andere Benutzer beeinflusst.

Der normale Checkmk-Benutzer, der das Monitoring nutzt und auf Benachrichtigungen reagiert.

guest

Darf alles sehen aber nichts ändern.

Gedacht zum einfachen „Gucken“, wobei sich alle Gäste ein gemeinsames Konto teilen. Auch nützlich für öffentliche Statusmonitore, die an der Wand hängen.

Die Rollen werden über Setup > Users > Roles & permissions verwaltet:

Liste mit Benutzerrollen.

Übrigens: Beim Erzeugen einer neuen Checkmk-Instanz wird nur ein Benutzer der Rolle admin angelegt (cmkadmin). Die beiden anderen Rollen werden erst mal nicht verwendet. Wenn Sie einen Gastbenutzer wünschen, müssen Sie diesen selbst anlegen.

6.2. Bestehende Rollen anpassen

Wie üblich gelangen Sie über das Symbol icon edit in den Editiermodus für eine Rolle:

Liste mit Berechtigungen für eine Benutzerrolle.

Welche Bedeutung die zahlreichen Berechtigungen haben (hier in Auszügen dargestellt), erfahren Sie aus der icon help Onlinehilfe.

Das Besondere hier: Für jede Berechtigung gibt es drei Auswahlmöglichkeiten: yes, no und default (yes) bzw. default(no). Am Anfang stehen alle Werte auf default. Für die Berechtigung selbst macht es erst mal keinen Unterschied, ob Sie yes oder default (yes) eingestellt haben. Allerdings kann eine neue Version von Checkmk den Defaultwert ändern (auch wenn das sehr selten vorkommt). Eine von Ihnen explizite gemachte Einstellung wäre dann von der Änderung nicht betroffen.

Außerdem können Sie durch dieses Prinzip sehr schnell erkennen, wo Ihre Checkmk-Installation vom Standard abweicht.

6.3. Eigene Rollen definieren

Vielleicht sind Sie überrascht, dass es keinen Knopf gibt, um eine neue Rolle anzulegen. Dahinter steckt Absicht! Neue Rollen erschaffen Sie durch ein Ableiten von bestehenden Rollen mittels icon clone Clone. Die neue Rolle wird nicht einfach als Kopie erzeugt, sondern behält den Bezug zur Ausgangsrolle (Based on role):

Basiseigenschaften einer erstellten Benutzerrolle.

Diese Verbindung hat eine wichtige Funktion. Denn alle Berechtigungen der geklonten Rolle, die nicht explizit gesetzt sind (also noch auf default stehen), werden von der Ausgangsrolle geerbt. Änderungen in der Ausgangsrolle schlagen also durch. Das ist sehr praktisch, wenn man bedenkt, wie viele Berechtigungen es gibt. Bei einer simplen Kopie könnten Sie sonst leicht den Überblick verlieren, was eigentlich das Besondere an Ihrer selbst definierten Rolle ausmacht.

Das Ableiten löst noch ein weiteres Problem: Da wir Checkmk rege weiterentwickeln, kommen immer wieder neue Berechtigungen hinzu. Jedes mal entscheiden wir dann, in welcher der drei Rollen admin, user und guest die neue Berechtigung enthalten sein soll. Da jede Ihrer eigenen Rollen von genau einer der drei vordefinierten Rollen abgeleitet ist, wird dann die neue Berechtigung automatisch auf einen sinnvollen Wert voreingestellt. Es wäre doch sehr unpraktisch, wenn Sie z.B. eine eigene user-Rolle definieren und dort neue Berechtigungen immer fehlen würden. Dann müssten Sie bei jedem neuen Feature Ihre Rolle anpassen, damit Ihre Benutzer diese nutzen könnten.

6.4. Rollen vergleichen mit der Matrixansicht

Wenn Sie die Berechtigungen in den einzelnen Rollen vergleichen möchten, hilft die Matrixansicht, zu erreichen über Setup > Users > Roles & permissions > Permission matrix. Der Menüeintrag erzeugt folgende Darstellung, in der Sie nicht nur die Berechtigungen der einzelnen Rollen vergleichen können, sondern auch die Stellen sehen, an denen explizit Berechtigungen gesetzt (Symbol icon perm yes) bzw. entfernt (Symbol icon perm no) wurden.

Matrix mit Benutzerrollen im Vergleich.

7. Persönliche Einstellungen

Einen kleinen Teil der Benutzereinstellungen kann jeder Benutzer für sein Profil selbst verwalten. Eine genaue Beschreibung aller Optionen finden Sie im Artikel zur Benutzeroberfläche.

Dazu ein Hinweis für verteiltes Monitoring: In einer verteilten Umgebung werden nach jeder Änderung die neuen Einstellungen sofort auf alle Monitoring-Instanzen übertragen. Nur so ist sichergestellt, dass insbesondere ein neu vergebenes Passwort auch sofort überall funktioniert — und nicht erst beim nächsten Aktivieren der Änderungen. Das klappt allerdings nur für Instanzen, die zu diesem Zeitpunkt auch über das Netzwerk erreichbar sind. Alle andere Instanzen bekommen die Aktualisierungen beim nächsten erfolgreichen Aktivieren der Änderungen.

8. Automationsbenutzer (für Webdienste)

Bei der Anbindung von Checkmk an andere Systeme kommt oft der Wunsch auf, bestimmte Tätigkeiten, die normalerweise über die GUI stattfinden, zu automatisieren. Einige Beispiele dafür sind:

  • Setzen und Entfernen von Wartungszeiten per Skript

  • Verwalten von Hosts per REST-API

  • Abrufen von Daten aus Ansichten als CSV oder JSON zum Zwecke der Weiterverarbeitung

  • Abrufen des aktuellen Status von BI-Aggregaten, um diese als Service anzulegen

In diesen Situationen muss eine externe Software bestimmte URLs der Checkmk-Oberfläche automatisiert abrufen können. Und da stellt sich natürlich die Frage, wie hier die Benutzeranmeldung geschieht. Der normale Weg über den Anmeldedialog ist umständlich und erfordert den Abruf von mehreren URLs hintereinander und das Speichern eines Cookies.

Um dies zu vereinfachen, bietet Checkmk das Konzept der Automationsbenutzer. Diese Benutzer sind ausschließlich für eine Fernsteuerung vorgesehen und erlauben keine normale Anmeldung über die GUI. Die Authentifizierung geschieht hier über bestimmte Variablen in der URL.

Sie legen einen Automationsbenutzer wie einen normalen Benutzer an, vergeben aber kein normales Passwort, sondern ein Automationspasswort (Automation secret). Dieses können Sie mit dem icon random Würfel automatisch erstellen lassen:

Sicherheitseinstellungen des Automationsbenutzers.

Ein Automationsbenutzer hat genauso wie ein normaler Benutzer eine Rolle und kann auch Kontakt sein. Damit können Sie also die Berechtigungen und die Sichtbarkeit von Hosts und Services nach Bedarf einschränken.

Beim automatischen Abruf von Webseiten geben Sie dann in der URL folgende Variablen zusätzlich an:

_username

die ID des Automationsbenutzer

_secret

dessen Automationspasswort (Automation secret)

Hier ist ein Beispiel für den Abruf einer Ansicht im JSON-Format mit dem Automationsbenutzer automation und dem Automationspasswort aus der obigen Abbildung:

root@linux# curl 'moni01.mycompany.net/mysite/check_mk/view.py?_username=automation&_secret=a8075a39-e7fe-4b5c-9daa-02635&view_name=svcproblems&output_format=json';
 [
  "service_state",
  "host",
  "service_description",
  "service_icons",
  "svc_plugin_output",
  "svc_state_age",
  "svc_check_age",
  "perfometer"
 ],
 [
  "CRIT",
  "stable",
  "Filesystem /",
  "menu pnp",
  "CRIT - 96.0% used (207.27 of 215.81 GB), (warn/crit at 80.00/90.00%), trend: +217.07 MB / 24 hours",
  "119 min",
  "30 sec",
  "96%"
 ],
 ...

Wenn das Skript, das die URL abruft, direkt in der Monitoring-Instanz läuft, können Sie das Automationspasswort für den Benutzer direkt aus dem Dateisystem auslesen. Das ist keine Sicherheitslücke, sondern so vorgesehen: Sie können Automatisierungsskripte schreiben, die das Automationspasswort nicht enthalten müssen und keine Konfigurationsdatei benötigen. Lesen Sie dazu die Datei ~/var/check_mk/web/myuser/automation.secret aus:

OMD[mysite]:~$ cat var/check_mk/web/automation/automation.secret
a8075a39-e7fe-4b5c-9daa-02635

In der Shell können Sie den Inhalt dieser Datei leicht in einer Variable speichern:

OMD[mysite]:~$ SECRET=$(cat var/check_mk/web/automation/automation.secret)
OMD[mysite]:~$ echo "$SECRET"
a8075a39-e7fe-4b5c-9daa-02635

Dies macht sich z.B. auch das Skript downtime zunutze, welches Sie im treasures-Verzeichnis von Checkmk finden und mit dem Sie skriptgesteuert Wartungszeiten für Hosts und Services setzen und entfernen können. Wenn der Automationsbenutzer wie bei uns im Beispiel automation heißt, brauchen Sie als einziges Argument den Host-Namen, für den eine Wartung eingetragen werden soll:

OMD[mysite]:~$ ~/share/doc/check_mk/treasures/downtime.py myhost123

Weitere Optionen des Skripts erfahren Sie in dessen Onlinehilfe:

OMD[mysite]:~$ ~/share/doc/check_mk/treasures/downtime.py --help

9. Automatische Anmeldung über die URL

Wie Sie gesehen haben, können Sie mit Automationsbenutzern beliebige URLs ohne Anmeldung skriptgesteuert abrufen. In Situationen, die ein echtes Login im Browser benötigen, funktioniert dies jedoch nicht, da die Logindaten bei enthaltenen Links (z.B. zu Bildern und iFrames) nicht weitergereicht werden.

Das beste Beispiel dafür ist der Wunsch, einen Monitor an die Wand zu hängen, der ständig ein bestimmtes Dashboard von Checkmk zeigt. Der Monitor soll von einem Rechner angesteuert werden, der beim Starten automatisch den Browser öffnet, sich an Checkmk anmeldet und das Dashboard aufruft.

Um so etwas zu realisieren, legen Sie sich am besten zunächst dafür einen speziellen Benutzer an. Die Rolle guest ist dafür gut geeignet, weil diese alle Leserechte einräumt, aber keine Veränderungen oder Eingriffe zulässt.

Die URL für eine automatische Anmeldung konstruieren Sie wie folgt:

  1. Beginnen Sie mit: http://mycmkserver/mysite/login.py?_origtarget=

  2. Ermitteln Sie die eigentlich anzuzeigende URL (z.B. die des Dashboards) mit Ihrem Browser — am besten ohne Navigation, was über Display > This page without navigation geht.

  3. Hängen Sie diese URL an, wobei Sie alles vor dem Teil /mysite/…​ weglassen.

  4. Fügen Sie an die URL die beiden Variablen _username und _password an und zwar in folgender Form: &_username=myuser&_password=mysecret.

  5. Fügen Sie noch ein &_login=1 an.

Hier ist ein Beispiel für so eine URL:

http://mycmkserver/mysite/check_mk/login.py?_origtarget=/mysite/check_mk/dashboard.py?name=mydashboard&_username=myuser&_password=mypassword&_login=1

Beachten Sie:

  • Ersetzen Sie im Beispiel die Werte mycmkserver, mysite, myuser und mypassword durch die bei Ihnen gültigen Werte. Als myuser können Sie nicht den Automationsbenutzer verwenden, da für ihn eine Anmeldung über die GUI nicht erlaubt ist.

  • Kommen die Sonderzeichen & oder % in einem dieser Werte oder in dem Wert von _origtarget vor, müssen Sie diese wie folgt ersetzen: & durch %26 und % durch %25.

Testen Sie das Ganze, indem Sie sich in Ihrem Browser von Checkmk abmelden und dann die konstruierte URL in Ihre Adresszeile vom Browser kopieren. Sie müssen dann direkt auf die Zielseite gelangen — ohne Anmeldedialog. Gleichzeitig werden Sie dabei angemeldet und können in der Seite enthaltene Links direkt aufrufen.

Sie können die fertige URL auch mit curl auf der Kommandozeile ausprobieren. Wenn Sie alles richtig gemacht haben, bekommen Sie als Ergebnis den HTTP-Status-Code 302 FOUND und eine Weiterleitung auf die angegebene Location, wie in der folgenden gekürzten Ausgabe:

OMD[mysite]:~$  curl -v 'http://mycmkserver/mysite/check_mk/login.py?_origtarget=/mysite/check_mk/dashboard.py?name=mydashboard&_username=myuser&_password=mypassword&_login=1'
...
< HTTP/1.1 302 FOUND
...
< Location: /mysite/check_mk/dashboard.py?name=mydashboard
...

Sollten Sie im Browser trotz dieser Erfolgsmeldung nicht die gewünschte Ansicht bekommen, prüfen Sie die unter Location angegebene URL - auch wenn diese falsch ist, liefert curl den HTTP-Status-Code 302 FOUND.

Bei falschen Login-Daten bekommen Sie die HTTP-Status-Code 200 OK, sehen aber lediglich den HTML-Code der Anmeldeseite, wie in der folgenden erneut gekürzten Ausgabe:

OMD[mysite]:~$ curl -v 'http://mycmkserver/mysite/check_mk/login.py?_origtarget=/mysite/check_mk/dashboard.py?name=mydashboard&_username=myuser&_password=NOT&_login=1'
...
< HTTP/1.1 200 OK
...
<!DOCTYPE HTML>
<html><head><meta content="text/html; ...
...
</script>
<script type="text/javascript">
cmk.visibility_detection.initialize();
</script>
</body></html>

10. Berechtigungen in Checkmk

10.1. Bedeutung der Rolle user für Checkmk

Wenn Sie eine etwas größere Monitoring-Umgebung zu verwalten haben, dann möchten Sie sicher auch Mit-Administratoren in die Konfiguration und insbesondere in das Verwalten von Hosts und Services mit einbeziehen. Damit Sie die Kontrolle darüber behalten, wer was ändern darf und damit sich die Leute nicht in die Quere kommen, können Sie Berechtigungen für das Checkmk Setup auf der Basis von Ordnern vergeben.

Der erste Schritt dazu ist, dass Ihre Administrator-Kollegen mit eigenen Benutzern arbeiten, die auf der Rolle user basieren.

Diese Rolle hat grundsätzlich eine Berechtigung für die Konfigurationsumgebung, allerdings mit einigen wichtigen Einschränkungen:

  • Es sind lediglich Änderungen an Hosts, Services, Regeln und BI-Aggregaten erlaubt.

  • Hosts, Services und Regeln können nur in freigegebenen Ordnern verwaltet werden.

  • BI-Aggregate können nur in freigegebenen BI-Paketen verwaltet werden.

  • Alles, was globale Auswirkungen hat, ist nicht erlaubt.

Solange Sie noch keine Ordner oder BI-Pakete freigegeben haben bedeutet das, dass die Benutzer der Rolle user zunächst keinerlei Änderungen machen können! Das abgespeckte Setup-Menü der Navigationsleiste sieht für normale Benutzer so aus:

Setup-Menü aus Benutzersicht.

10.2. Benutzern das Verwalten von Hosts ermöglichen

Die Berechtigung für das Anlegen, Editieren und Entfernen von Hosts erhält ein Benutzer über Kontaktgruppen. Der Ablauf ist wie folgt:

  1. Nehmen Sie den Benutzer in eine Kontaktgruppe auf.

  2. Bestimmen Sie einen oder mehrere Ordner, für die der Benutzer berechtigt sein soll.

  3. Aktivieren Sie die Eigenschaft Permissions dieser Ordner und wählen Sie die Kontaktgruppe hier aus.

Das folgende Beispiel zeigt die Eigenschaften eines Ordners, in dem alle Benutzer der Kontaktgruppe Linux Hosts verwalten dürfen. Dabei ist die Option aktiviert, dass dies auch in Unterordnern erlaubt sein soll.

Ordnereigenschaften mit freigegebener Kontaktgruppe Linux.

Ob Sie die Hosts automatisch in die Kontaktgruppe aufnehmen möchten, bleibt Ihnen überlassen. In diesem Beispiel ist die Option Add these groups as contacts to all hosts in this folder nicht gesetzt und die Hosts werden somit auch nicht in die Kontaktgruppe Linux aufgenommen. Damit sind sie in der Monitoring-Umgebung dann für die Kontaktgruppe Linux nicht sichtbar (solange dies nicht eine Regel erledigt). Wie Sie sehen, sind also die Sichtbarkeit (und Zuständigkeit im Monitoring) und die Berechtigung für die Konfigurationsumgebung getrennt regelbar.

11. Passwörter

11.1. Sicherheit von Passwörtern

Sicherheit wird heutzutage hoch aufgehängt. Daher gibt es in manchen Unternehmen generelle Vorgaben, wie mit Passwörtern umgegangen werden soll. Checkmk bietet etliche Einstellungen, um solche Vorgaben zu erzwingen. Einen Teil davon finden Sie unter Global settings > User management > Password policy for local accounts:

Dialog für Passwort-Regeln.

Die erste Option Minimum password length soll die Qualität des Passworts sicherstellen.

Für die zweite Option Number of character groups to use gibt es insgesamt vier Zeichengruppen:

  • Kleinbuchstaben

  • Großbuchstaben

  • Ziffern

  • Sonderzeichen

Tragen Sie hier eine 4 ein, so muss ein Passwort aus jeder der genannten Gruppen mindestens ein Zeichen enthalten. Bei einer 2 ist zumindest sichergestellt, dass das Passwort nicht z.B. nur aus Kleinbuchstaben besteht. Diese Einstellungen werden bei jeder Änderung des Passworts überprüft.

Die dritte Option Maximum age of passwords zwingt den Benutzer, in regelmäßigen Abständen sein Passwort zu ändern. Sobald es soweit ist, führt der nächste Seitenzugriff den Benutzer zu folgender Eingabeaufforderung:

Dialog für erzwungene Passwort-Neuvergabe.

Erst nach einer Änderung seines Passworts darf der Benutzer weitermachen.

Sie können eine Änderung des initialen Passworts gleich beim ersten Login vorschreiben. Dazu dient die Option Enforce change: Change password at next login or access im Abschnitt Security in den Eigenschaften des jeweiligen Benutzers.

11.2. Richtlinien für die Anmeldung

Unter Global settings > User management finden Sie noch weitere globale Einstellungen, welche die Anmeldung von Benutzern betreffen.

Sperrung nach fehlerhaften Anmeldungen

Mit der Einstellung Lock user accounts after N logon failures können Sie ein Konto nach einer Reihe von fehlerhaften Anmeldeversuchen sperren:

Dialog für automatische Login-Deaktivierung.

Ein Entsperren ist dann nur noch durch einen Benutzer mit der Rolle admin möglich. Beachten Sie dabei, dass auch die Administratorkonten gesperrt werden können! Sollten Sie endgültig ausgesperrt sein, so können Sie Ihr Konto nur noch auf der Kommandozeile entsperren. Editieren Sie dazu als Instanzbenutzer die Datei etc/htpasswd und entfernen Sie in der Zeile des betroffenen Benutzers, hier myuser, das Ausrufezeichen:

OMD[mysite]:~$ cat etc/htpasswd
myuser:!$5$rounds=535000$PbQjbXyK...
automation:$5$rounds=535000$ygVkI2Ac...
cmkadmin:$apr1$bhGavmqd...
OMD[mysite]:~$ vim etc/htpasswd
...
OMD[mysite]:~$ cat etc/htpasswd
myuser:$5$rounds=535000$PbQjbXyK...
automation:$5$rounds=535000$ygVkI2Ac...
cmkadmin:$apr1$bhGavmqd...

Dann können Sie sich wieder anmelden.

Automatisches Abmelden

Die Einstellung Login session idle timeout sorgt für ein automatisches Abmelden für den Fall, dass ein Benutzer längere Zeit die GUI nicht verwendet:

Dialog für Login-Timeouts.

Der Timeout wird hierbei nur durch aktives Verwenden der GUI aufgehalten. Es reicht z.B. nicht, nur eine Ansicht geöffnet zu haben, die sich selbst regelmäßig neu lädt.

Verhinderung von Mehrfachanmeldungen

Die Einstellung Limit login to single session at a time verhindert, dass ein Benutzer sich mit zwei Browsern parallel an Checkmk anmeldet:

Dialog zur Begrenzung der Anzahl von Sitzungen.

Diese Option ist gleichzeitig mit einem Timeout für einen automatischen Logout bei Untätigkeit verknüpft. Dies ist auch sinnvoll. Nehmen wir an, Sie haben an Ihrem Arbeitsplatz vergessen, sich abzumelden, bevor Sie den Browser schließen. Ohne einen Timeout wäre es Ihnen in diesem Fall nicht möglich, sich während der Bereitschaft von zu Hause aus anzumelden. Denn das Schließen des Browsers oder das Herunterfahren des Rechners löst keine Abmeldung aus!

Bei dem Versuch einer parallelen zweiten Anmeldung sehen Sie dann folgenden Fehler:

Gesperrter Anmeldedialog mit Hinweis auf laufende Sitzung.

Die Anmeldung kann in diesem Fall nur durchgeführt werden, wenn Sie die bestehende Sitzung aktiv beenden oder den eingestellten Timeout abwarten.

11.3. Passwort auf der Kommandozeile ändern

Sie können im Notfall ein Passwort auch per Kommandozeile ändern. Das rettet Sie in dem Fall, in dem Sie das Passwort von cmkadmin verloren haben. Voraussetzung ist natürlich, dass noch eine Anmeldung als Linux-Benutzer auf dem Checkmk-Server möglich ist und Sie mit omd su mysite Instanzbenutzer werden können.

Die Passwörter sind in der Datei ~/etc/htpasswd gespeichert, wie bereits weiter oben beschrieben.

Das Ändern geschieht mit dem Befehl htpasswd, der aus der Apache-Installation kommt. Dieser fragt Sie nicht nach dem bestehenden Passwort. Wir empfehlen, dass Sie ihr Passwort durch Verwendung der Option -m mithilfe von MD5 verschlüsseln. Unverschlüsselte oder mit bcrypt verschlüsselte Passwörter erlauben derzeit keinen Login in die GUI.

OMD[mysite]:~$ htpasswd -m etc/htpasswd cmkadmin
New password: geheim
Re-type new password: geheim
Updating password for user cmkadmin

12. Benutzerdefinierte Attribute

Für die Benachrichtigung von Benutzern steht Ihnen neben dem Feld für die E-Mail-Adresse noch das Feld Pager address zur Verfügung. Wenn Ihnen das nicht ausreicht und Sie noch mehr Informationen zu einem Benutzer speichern möchten, können Sie über Setup > Users > Custom user attributes > Add attribute eigene Felder erzeugen, die dann pro Benutzer individuell mit Werten gefüllt werden können.

Das Anlegen eines neuen solchen Attributs bringt Sie zu folgendem Dialog:

Dialog für benutzerdefinierte Attribute.

Wie immer ist die ID (Name) später nicht änderbar, der Titel (Title) aber schon. Das Topic legt fest, in welchen Abschnitt der Benutzereinstellungen das neue Feld einsortiert wird. Ferner können Sie entscheiden, ob Benutzer das Feld selbst editieren können (es wird dann in ihren persönlichen Einstellungen auftauchen) und ob der Wert direkt in der Benutzertabelle angezeigt werden soll.

Wichtig: Nur wenn Sie die Checkbox bei Make this variable available in notifications aktivieren, können Sie diesen Wert auch bei Benachrichtigungen verwenden. Denn dazu muss der Wert dem Monitoring-Kern (z.B. CMC) in einer Variablen (ein sogenanntes „Custom macro“) bekannt gemacht werden.

Der Name der Custom-Variable wird aus der von Ihnen gewählten ID abgeleitet. Diese wird in Großbuchstaben umgewandelt und es wird ein CONTACT_ vorangestellt. Aus einem phone wird dann also CONTACT_PHONE. Beachten Sie, dass beim Übergeben der Variable über Umgebungsvariablen dann nochmal ein NOTIFY_ vorangestellt wird. Bei Ihrem eigenen Benachrichtigungsskript kommt die Variable dann also als NOTIFY_CONTACT_PHONE an.

13. Meldungen an Benutzer schreiben

Im Artikel über Benachrichtigungen gehen wir sehr ausführlich darauf ein, wie Checkmk die Kontakte über Probleme bei Hosts oder Service informieren kann. Manchmal möchten Sie aber vielleicht alle Benutzer (auch solche, die keine Kontakte sind) über Organisatorisches in eigener Sache informieren — z.B. über eine Wartung des Checkmk-Systems selbst.

Für solche Zwecke bietet Checkmk ein kleines eingebautes Meldungstool, das völlig getrennt von den Benachrichtigungen funktioniert. Das Tool finden Sie über Setup > Users und dort in Users > Notify users. Hier haben Sie die Möglichkeit, eine Meldung an alle (oder manche) Ihrer Benutzer zu schreiben.

Dialog für Benutzermeldungen.

Dabei haben Sie die Wahl zwischen vier Meldungsarten:

Open window in the user interface

Beim nächsten Seitenaufruf des Benutzers wird ein Popup-Fenster mit der Nachricht geöffnet.

Show hint in the 'User' menu

Der Benutzer wird durch ein Zahlensymbol im User-Menü der Navigationsleiste auf die Nachricht hingewiesen.

Send an E-Mail

Versendet eine E-Mail. Damit erreichen Sie aber nur Benutzer, bei denen auch eine E-Mail-Adresse konfiguriert ist.

Show notification in dashboard element 'User notifications'

Die Nachricht wird in einem Dashlet des Typs User notifications angezeigt.

Mit Enable automatic invalidation at können Sie noch nicht abgerufene Meldungen einfach löschen, sobald diese nicht mehr relevant sind.

14. Weiterführende Themen

Checkmk beherrscht noch weitere Spielarten der Anmeldung:

  • Anbindung von LDAP/Active Directory

  • Authentifizierung mit Kerberos

  • Authentifizierung in einem Aufbau mit Reverse-Proxy

  • Authentifizierung mit HTTP Basic Authentication

15. Dateien und Verzeichnisse

Folgende Aufstellung zeigt Ihnen, welche Dateien und Verzeichnisse auf dem Checkmk-Server mit der Benutzerverwaltung zu tun haben. Wie immer sind alle Angaben hier relativ zum Instanzverzeichnis (z.B. /omd/sites/mysite).

PfadBedeutung

etc/htpasswd

Passwörter der Benutzer im Apache-htpasswd-Format.

etc/auth.secret

Diese Datei enthält ein zufälliges Geheimnis, mit dem Anmelde-Cookies signiert werden. In verteilten Umgebungen soll diese Datei in allen Instanzen gleich sein — und ist dies auch, wenn Sie alles mit der Weboberfläche einrichten. Wird diese Datei geändert, so werden alle Anmeldungen sofort ungültig und Benutzer müssen sich neu anmelden. Diese Datei ist mit den Rechten 660 versehen, da ein Lesezugriff von Dritten das Fälschen einer Anmeldung ermöglichen würde.

etc/auth.serials

Seriennummern der Passwörter pro Benutzer. Jede Änderung des Passworts erhöht die Seriennummer und macht damit alle aktuellen Sitzungen ungültig. Damit ist sichergestellt, dass eine Passwortänderung einen Benutzer zuverlässig abmeldet.

etc/check_mk/multisite.d/wato/users.mk

Enthält die mit der Konfigurationsumgebung eingerichteten Benutzer. Hier sind nur diejenigen Daten über die Benutzer gespeichert, die sich rein mit der GUI befassen. Manuelle Änderungen in dieser Datei werden sofort wirksam.

etc/check_mk/conf.d/wato/contacts.mk

Kontaktinformationen der mit der Konfigurationsumgebung eingerichteten Benutzer. Hier sind alle Daten abgelegt, die für die Konfiguration des Monitoring-Kerns relevant sind. Nur Benutzer, die auch Kontakte sind, sind hier aufgeführt. Damit manuelle Änderungen hier wirksam werden, muss die neue Konfiguration in den Kern geladen werden — z.B. mit cmk -O.

var/check_mk/web

Jeder Benutzer, der sich mindestens einmal an der GUI angemeldet hat, hat hier ein Unterverzeichnis, in dem Dinge wie selbst erstellte Ansichten und Berichte, die aktuelle Konfiguration der Seitenleiste und vieles anderes in einzelnen kleinen Dateien mit der Endung .mk gespeichert sind. Diese Dateien haben Pythonformat.

var/log/web.log

Logdatei der Benutzeroberfläche. Hier finden Sie Fehlermeldungen bezüglich Authentifizierung und LDAP-Anbindung.

Auf dieser Seite