Seite wählen

NETWAYS Blog

Serie NSClient++ – Teil 5: Neue Version NSCP 0.4.0

NSClient++ wurde anfang des Monats in einer neuen Version veröffentlicht; NSClient++ 0.4.0.
Die größte Veränderung zur Version 0.3.9 ist der neue, veränderte „Core“. Das Herz des NSClient wurde dahingehend erwetitert das es um eine neue Commandline Syntax, neue Module und Checks sowie neue, integrierte Bibliotheken erweitert wurde.
Bis dato war es möglich beliebige Skripte durch den NSClient ausführen zu lassen, soweit ein Interpreter auf dem System vorhanden war.
Konnte der Windows Server PowerShell Skripte ausführen, konnte NSClient++ dies auch. In der akutellen Version kann NSClient++ von Hause aus Skripte in Python, LUA, .NET und C Plugins (C, C++, etc) ausführen.
Die „alte“, klassische nsc.ini wurde durch eine neue, „aufgeräumte“ Konfigurationsdatei erstetzt. Außerdem ist es weiterhin möglich die Konfiguration in die Registry auszulagern um diese beispielsweise über eine Grouppolicy zu verteilen.
Die neue nsclient.ini hat folgendes Konfigurationslayout:
Einstellungen werden nicht mehr ein- oder auskommentiert, sondern aktiviert oder deaktivert.

[/modules]
; CheckDisk - CheckDisk can check various file and disk related things. The
current version has commands to check Size of hard drives and directories.
CheckDisk = 1
; Event log Checker. - Check for errors and warnings in the event log. This is
only supported through NRPE so if you plan to use only NSClient this wont help
you at all.
CheckEventLog = 0

Defaultwerte sind nicht mit in der nsclient.ini enthalten sondern müssen nur noch bei Abweichungen eingetragen werden.
Diese haben allerdings nicht mehr das alte Format sondern es wurden alle _ (underscores) durch Leerzeichen ersetzt.

; Undocumented section
[/settings/default]
; ALLOWED HOSTS - A comaseparated list of allowed hosts. You can use netmasks (/syntax) or * to create ranges.
allowed hosts = 192.168.119.145
; Section for NRPE (NRPEListener.dll) (check_nrpe) protocol options.
[/settings/NRPE/server]
allow arguments = 1
allow nasty meta chars = 1
use ssl = 1

Für die Kommunikation mit dem NSClient++ empfehlen wir, wie auch schon in den voherigen Blogposts dieser Serie, die NRPE Schnittstelle.
Für kommende Versionen ist eine native WMI Schnittstelle sowie der Linux Support geplant.
Wie der aktuelle Entwicklungsstand ist und was noch auf der TODO Liste steht kann aus dem Changelog entnommen werden:

Icinga Training in Düsseldorf, die Erste….

Icinga Availibility Monitoring
Eigentlich war mein Ziel des Blogposts für diese Woche die NSClient++ Serie, die nun schon seit zwei Jahren ruht, endlich fortzusetzen. Dies wird auch in nächster Zeit geschehen, der Draft dazu befindet sich in der Vollendung, versprochen! Aber nun zum aktuellen Post für diese Woche:
Im letzten Jahr haben wir uns entschlossen unser Schulungsprogramm neben Nürnberg auf weitere Standorte auszuweiten, nämlich Zürich und Düsseldorf. Leider mussten wir die erste Puppet Schulung in Zürich krankheitsbedingt, absagen. Das nächste Puppet Training in Zürich ist aber bereits datiert und findet vom 26. Juni bis 28. Juni statt.
Schulungslocation DüsseldorfIn Düsseldorf fand letzte Woche aber unser erstes Icinga/Nagios Availability Monitoring Training statt und für die Kollegen aus dem Event Bereich als auch für unsere Trainer ist das erste Training an einem neuen Standort natürlich immer mit einem großen organisatorischem Aufwand verbunden. Daher haben wir uns sehr über das gute Feedback der Teilnehmer (nach Schulnoten gab es eine 1,5) gefreut.
Bei allen unseren Trainings ist es uns wichtig, dass sich die Teilnehmer wohlfühlen und während der Schulungstage eine gute Atmosphäre herrscht. Bei den Nagios/Icinga Trainings reisen die Teilnehmer so schon am Vortag an damit am ersten Tag des Trainings stressfrei und ausgeruht gestartet werden kann. Und neben dem theoretischen Teil des Schulungsinhaltes ist es unser Ziel den Teilnehmern die ersten Schritte mit Icinga/Nagios durch viele praxisnahe Aufgaben leichter zu machen: Wie überwache ich meine Linux/Unix Server? Wie definiere ich Businessprozesse, um diese anschließend zu überwachen?
Abendveranstaltung Icinga Availability Monitoring TrainingAbseits des „Lernstresses“ und passend zum Bergfest fand dieses mal die Abendveranstaltung im Clube Portugues statt. Schöne Atmosphäre, lustige und interesannte Gespräche, eben eine rundum gelungene Abendveranstaltung.
Ich möchte mich hier nochmals bei allen Teilnehmern für eine sehr schöne Woche in der Landeshauptstadt Düsseldorf bedanken. Das sonnige und warme Wetter war sicher auch nicht ganz unbeteiligt an der guten Stimmung. Die lange Vorbereitungszeit und der damit verbundene Aufwand haben sich gelohnt, Düsseldorf wir kommen wieder, nächstes mal am 21.-25. Mai 2012.
Das nächste Icinga/Nagios Training in Nürnberg findet übrigens vom 07. – 11. Mai statt.

OpenLDAP 2.4.x und die ACL

In vergangenen Blogposts habe ich erwähnt welche Möglichkeiten OpenLDAP 2.4.x bei der Replikation bietet und wie man neuerdings weitere Schema zu OpenLDAP hinzufügen kann.
Mit dem dynamischen Backend cn=config hat sich auch das bearbeiten der ACL (Access Control List) verändert.
Unter OpenLDAP < 2.4.x war die slapd.conf die richtige Anlaufstelle um Benutzern, Gruppen etc. den Zugriff auf bestimmte Attribute, Objekte, Teilbäume... zu ermöglichen. cn=config als dynamisches Backend fordert hier eine neue Vorgehensweise um die ACL zu administrieren.
Generell gibt es zwei Möglichkeiten neue Zugriffsrechte zu definieren oder bestehende zu ändern.

  • Änderungen direkt in das entsprechende Backend-LDIF eintragen (olcDatabase={1}hdb oder olcDatabase={1}bdb).
  • Änderungen über ein separates LDIF File mit ldapadd oder ldapmodify zu importieren.

Wie bei allen Dingen die im Backend geändert werden gilt auch hier, alle Änderungen werden während der Laufzeit übernommen und erfordern keinen Reload des OpenLDAP Daemons.
Nun aber ans Eingemachte…
Bevor wir eine Access Control List aufbauen können, müssen wir wissen wie die Definition auszusehen hat und welche Möglichkeiten der Definition es gibt.
Die Definition einer ACL hat sich zu älteren OpenLDAP Versionen nicht groß geändert und immer den Folgenden grundlegenden Aufbau:

olcAccess: {n} to "what" by "who" "access"

Was in vollendeter Form z.B. so aussehen kann:

olcAccess: {2}to dn.subtree="ou=company,dc=netways,dc=org" by group.exact="cn=admins,ou=users,dc=netways,dc=org" write by * read by anonymous none

Das Beispiel ermöglicht den Mitgliedern der Gruppe „admins“ Schreibrechte auf den Inhalt der Organisationseinheit „company“. Andere Benutzer haben Leserechte und Anonyme haben keinerlei Rechte.
Die {2} definiert die Reihenfolge der Verarbeitung. Die Access Control List wird von oben nach unten abgearbeitet. Regeln mit {1} greifen vor Regeln mit {2}, {3} etc… und werden auch so angewendet.
Eine Standardregel, die meist sehr weit oben in der ACL angesiedelt ist, lautet:

{1}to * by self write by dn="cn=admin,dc=netways,dc=org" write by * read

Diese Regel verhindert meist das folgende Regeln überhaupt Wirkungsvoll sind. Die Regel sagt aus das Überall der Benutzer „admin“ Schreibrechte hat und jeder andere Benutzer Leserechte hat (und Benutzer auf die eigenen Objekte Schreibrechte haben). Ist diese Regel weit oben in der ACL angesiedelt haben die darauf folgenden Regeln meist keine Wirkung, daher empfiehlt es sich hier die Reihenfolge anzupassen.
Eine sehr detaillierte Anleitung über die Möglichkeiten der Definitionen gibt hier die OpenLDAP 2.4 Dokumentation: http://www.openldap.org/doc/admin24/access-control.html
Die Dokumentation entält, meiner Meinung nach, eine sehr gute und verständliche Beschreibung der „what“ Definition:
0: o=suffix
1: cn=Manager,o=suffix
2: ou=people,o=suffix
3: uid=kdz,ou=people,o=suffix
4: cn=addresses,uid=kdz,ou=people,o=suffix
5: uid=hyc,ou=people,o=suffix
dn.base=“ou=people,o=suffix“ trifft 2
dn.one=“ou=people,o=suffix“ trifft 3 und 5
dn.subtree=“ou=people,o=suffix“ trifft 2, 3, 4 und 5
dn.children=“ou=people,o=suffix“ trifft 3, 4 und 5
Welche unterschiedlichen Möglichkeiten der „what“ „who“ und „access“ Definition man hat beschreibt das Schaubild unter „8.2. Access Control via Static Configuration“.
Bisschen was aus der Praxis…
Damit dieser Blogpost nicht allzu theoretisch wird ein paar Code snippets die das Thema ACL ggf. etwas leichter machen.
Definitionen zur ACL hinzfügen:

changetype: add
add: olcAccess
olcAccess: to dn.subtree="ou=company,dc=netways,dc=org" by group.exact="cn=admins,ou=users,dc=netways,dc=org" write by * read

Neue Definitionen werden in der Liste ganz am Ende aufgeführt und bekommen immer die höchste Listenzahl {}
Definition in der ACL ändern:

changetype: modify
delete: olcAccess
olcAccess: to dn.children="ou=contacts,dc=netways,dc=org" by * search
-
add: olcAccess
olcAccess: to dn.children="ou=contacts,dc=netways,dc=org" by * write
-

Definitionen abändern erfordert ein „delete: olcAccess“ und ein „add: olcAccess“. Die „-“ sind im LDIF wichtig.
Definition an bestimmter Stelle in ACL ändern:

changetype modify
delete: olcAccess
olcAccess: {1}
-
add: olcAccess
olcAccess: {1}to dn.children="ou=contacts,dc=netways,dc=org" by * write
-

Hier wird der Inhalt von {1} mit dem neuen überschrieben.
Noch was Gutes zum Schluß…
Das Backend cn=config kann mit der Zeit sehr groß und sehr komplex werden.
Insbesondere dann wenn die ACL sehr groß geworden ist.
Zur Administration des Backends ist es daher Empfehlenswert auf einen gut strukturieren und übersichtlichen LDAP Browser / Editor zurück zu greifen.
Ich verwende sehr gerne Apache Directory Studio oder unter Windows LDAPAdmin.
Eine Verbindung zur cn=config erfolgt über den administrativen Backendbenutzer (meist cn=Manager,cn=config oder cn=admin,cn=config) und über die BaseDN cn=config.

Openldap Schema Erweiterung cn=config

In dem Artikel wurde beschrieben welche Neuerungen in OpenLDAP 2.4 enthalten sind.
In diesem Artikel möchte ich kurz darauf eingehen wie man das Schema mit dem cn=config Konfigurationsbackend erweitern kann.
Um neue Schema einzubinden müssen zunächst alle vorhanden inkl. dem neuen Schema in ein LDAP Format exportiert werden.
1. Eine schema_convert.conf erstellen mit dem Inhalt aller vorhandenen Schema:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/netways.schema

Wichtig: Das neue Schema (in diesem Fall netways.schema) muss unter /etc/openldap/schema liegen.
2. Schema an einen temporären Ort exportieren:

# mkdir /tmp/ldapexport
# slaptest -f schema_convert.conf -F /tmp/ldapexport

3. Editieren der Datei /tmp/ldapexport/cn=config/cn=schema/cn={8}netways.ldif und folgende Attribute abändern:

dn: cn=netways,cn=schema,cn=config
...
cn: netways

Folgende Zeilen am Ende der Datei entfernen:

structuralObjectClass: olcSchemaConfig
entryUUID: 10dae0ea-0760-102d-80d3-f9366b7f7757
creatorsName: cn=config
createTimestamp: 20080826021140Z
entryCSN: 20080826021140.791425Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20080826021140Z

4. Abschließend muss das erweiterte Schema mit ldapadd wieder importiert weden.

# ldapadd -x -D cn=admin,cn=config -f /tmp/ldapexport/cn=config/cn=schema/cn={8}netways.ldif

In unserem LDAP Backend (cn=config) sollte nun die DN: cn={8}netways,cn=schema,cn=config auftauchen.
Anmerkung:
Der Name {8}netways kann variieren.
Mit folgendem Befehl kann der korrekte Name herausgefunden werden:

slapcat -f schema_convert.conf -F /tmp/ldapexport -n 0 | grep netways

Icinga Monitoring Schulung

Open Source Produkte haben für viele Unternehmen an erster Stelle den großen Anreiz Geld bzw. Ressourcen zu sparen. Das klingt Anfangs sehr schlüssig und jeder Controller oder Buchhalter wird diesen Ansatz befürworten. Gerade der Markt an System- oder Netzwerkmonitoring Produkten bietet neben den Open Source Produkten wie Icinga, Nagios, OpenNMS etc. eine Vielzahl mehr an propertären Produkten z.B.: HP OpenView, Microsoft System Center Operations Manager (SCOM), CA Unicenter/Spectrum, DELL Data Center System Management uvm. Nach dem Vergleich der einzelnen Produkte mit den Open Source Alternativen zeigt sich schnell in welchem finanziellen Rahmen sich die Kosten für ein weitestgehend betriebssystemunabhängiges und mandantenfähiges Monitoringsystem mit propertären Lösungen bewegen.
Daraus nun folglich zu schließen, die OpenSource Lösungen seien umsonst oder gar kostenfrei stimmt leider auch immer nur im buchhalterischen Sinne mit Blick auf die Einkaufszahlen. Das Implementieren einer Open Source Lösung, ohne Consulting kostet „Manpower“, also interne, vorhandene Ressourcen. In der heutigen, schnell wachsenden und mit täglich neuen Herausforderungen versehenen IT wird es immer schwieriger diese internen Ressourcen über einen langen Zeitraum für das Einarbeiten in diese Themen freizugeben.
Also was machen? Externes Consulting kaufen wäre eine Option, das weiterbilden der eigenen Mitarbeiter eine andere.
Nach dem Erfolg unserer Nagios Schulungen bieten wir nun auch Icinga Schulungen an.
Von der Installation, über die Konfiguration bis hin zur Anwendung verschiedenster AddOn Produkte vermittelt unsere Icinga Schulung auch, was es im Bereich des neuen Webfrontends Icinga-Web zu beachten gibt. – Wie integriere ich die AddOn Produkte in Icinga-Web, welche Möglichkeiten der Benutzerverwaltung und des Rechtemanagements habe ich, was muss ich bei der Installation beachten, welche Best Practice Tips gibt es für meine eigene Installation abweichend vom Standard.
Aus vielen großen Icinga und Nagios Installation möchten wir unser gewonnenes Wissen und unsere vielen Erfahrungen teilen und schon angefangen bei der Grundinstallation aufzeigen, wie welche Option am sinnvollsten genutzt wird. Der Workshop hilft nicht nur das eigene Wissen zur erweitern sondern bietet auch Platz zum Erfahrungsaustausch untereinander.
Weitere Informationen zu den nächsten Training-Terminen sind hier zu finden: http://www.netways.de/de/units/training/icinga
Ich freue mich auf Sie….