neues NetWorker Tool : set_nsrexecd_admins
Verfasst von Uwe W. Schäfer am 5. August 2015
Wie bereits in einem früheren Blog beschrieben, wird eine fehlerfreie Authorisierung zwischen den einzelnen NetWorker-Komponenten (Server, NMC, StorageNode und Client) immer wichtiger.
Leider ist eine einfache Bearbeitung der Client-Zertifikate mit Hilfe der NMC aber nicht ohne administrativen Eingriff möglich.
In meinen NetWorker-Advanced Workshops entwickle ich mit den Teilnehmern ein nsradmin-Shell-Skript, das ein erweitern des Client-Administrator-Attributes auf allen NetWorker-Clients eines NetWorker-Servers ermöglicht. Das Ziel des Skriptes: Ein NMC-Administrator erhält die Erlaubnis, alle Client-Attribute der NMC-Rubrik 'local hosts' zu bearbeiten. Hierdurch kann ein NMC-Administrator dann auch falsche Zertifikate (peer informations) leicht an einer beliebigen NetWorker-Instanz Löschen.
Diese Shellskripte sind für das Hinzufügen einer Administrator-Kennung erst mal genügend, aber bei der mehrfachen Verwendung des Skripts werden doppelte Einträge erzeugt. Ausserdem gibt es einige hilfreiche Funktionen nicht, wie zum Beispiel:
- Löschen nicht mehr aktiver Admin-Kennungen auf allen Clients
- Löschen von doppelten Einträgen
- Anzeige des Ist-Zustands für definierte Clients
- ...
All diese Funktionen bringt unser neues NetWorker-Tool 'set_nsrexecd_admins' mit!
Hier eine kurze Übersicht der Funktionalität und die Usage des Tools:
- Add
Hinzufügen eines NMC-Benutzers als Client-Administrator zu allen oder zu definierten NetWorker-Clients.
- Delete
Löschen eines angegebenen Client-Administrators von allen oder definierten NetWorker-Clients.
- Cleanup
Entferne doppelte Einträge und den fehlerhaften 'root' Eintrag von den definierten Clients.
- View
Gib die aktuelle Client-Administrator-Liste aus.
- Test
Führe keine Veränderung an der Administrator-Liste durch, sondern zeige nur auf, welche Veränderungen durchgeführt würden.
Usage:
set_nsrexecd_admins: [-v]* [--add] [--nmc <NMC Server name>] [-m <client name>]* <username>
set_nsrexecd_admins: [-v]* --delete [--test | -n][--nmc <NMC Server name>] [-m <client name>]* <username>
set_nsrexecd_admins: [-v]* --cleanup [--test | -n] [-m <client name>]*
set_nsrexecd_admins: [-v]* --view [-m <client name>]*
--add Add a new nsrexecd Administrator to the clients
--delete Delete a nsrexecd Administrator from clients
--cleanup Remove 'root' and double entrys
--view Print the actual administrator list for clients
--test Print what would be done, but don't do it
--nmc <NMC Server name> use this NMC-Machine-name for the administrator
-m <client> work only on the given client[s]
-v verbose
Für Testzwecke können Sie nach der Installation des Tools, die in alphabetischer Reihenfolge 10 ersten Clients Ihrer NetWorker-Umgebungbearbeiten.
Ein einfacher Download bietet Ihnen die Möglichkeit die alphabetisch 10 ersten Clients Ihrer NetWorker-Umgebung zu bearbeiten. Weitere Informationen und Konfigurationsmöglichkeiten befinden sich in der README-Datei des Tools.
Das vorliegende Tool kann auch als Beispiel für die Möglichkeiten zur Automatisierung durch unsere NetWorker-Python-Bibliothek dienen. Sollten SIe vor dem Problem stehen, bestimmte Aufgaben um NetWorkerumfeld automatisieren zu wollen, so fragen Sie uns.
Wir können Ihnen mit Sicherheit eine Lösung anbieten oder entwickeln.
uws
NetWorker Authentication Funktionsweise und Fallstricke
Verfasst von Uwe W. Schäfer am 8. Juni 2015
Ein Blick auf die NetWorker Authentifizierung
Die NetWorker Authentifizierung ist seit langem Bestandteil der NetWorker Instanzen. Dennoch gibt es immer wieder Unverständnis über das NetWorker eigene Authentifizierung-Verfahren, die Art und Weise, wie man die Client Schlüssel am geschicktesten verwaltet und wie man die lästigen SSL-Fehlermeldungen aus der NetWorker-Protokoll-Datei (logs/daemon.raw) wieder los wird. Aus gegebenen Anlass hier mal ein Versuch etwas mehr Klarheit in das Thema zu bringen.
Folgende Themen möchte ich hierbei betrachten:
- Wie funktioniert die Authentifizierung?
- Wie wird das Client-Zertifikat generiert und verwaltet?
- Wie kann man mit der NetWorker-Management-Console (NMC) die Client Zertifikate verwalten?
- Wie kann ich die Verwendung der Client-Zertifikate erzwingen?
- Was sind die Fallstricke bei der NetWorker Authentifizierung?
Sollte einer der folgenden Meldungen in ihren Protokollen auftauchen, kann ihnen dieser Artikel hoffentlich weiter helfen.
…nsrexecd SSL critical 51 Unable to complete SSL handshake with host…
nsrexecd GSS An authentication request from xxx was denied.
The 'NSR peer information' provided did not match the one stored by
yyy To accept this request, delete the 'NSR peer information' resource with
the following attributes from yyy's NSRLA database: name: xxx;
NW instance ID: e7b5adc4-00000004-f1483d9e-55757b22-00010c00-5d22e929;
peer hostname : xxx
89987:save: Cannot determine the job ID: Failed to register with server yyy:
Authentication error; why = Client credential too weak. Continuing ...
100128:save: Unable to update job with id '0' with command value
'save -b dd -s yyy /etc/hosts':
Invalid or NULL session channel
76677:save: Authentication error; why = Client credential too weak
90017:save: Cannot open a save session with NetWorker server 'yyy'
-
Wie funktioniert die Authentifizierung?
-
Wie wird das Client-Zertifikat generiert und verwaltet?
-
Wie kann man mit der NetWorker-Management-Console (NMC) die Client-Zertifikate verwalten?
-
Wie kann ich die Verwendung der Client-Zertifikate erzwingen?
-
Was sind die größten Fallstricke bei der NetWorker Authentifizierung?
Ich kann hier leider nur die wichtigsten Probleme aufführen, es gibt weitere und mit Sicherheit auch mir nicht bekannte Probleme.
- Mehrere Maschinen verwenden das gleiche Zertifikat!
Dieses Problem tritt vor allem in Virtualisierungsumgebungen auf! Das für den Aufbau von neuen virtuellen Maschinen verwendete VM-Image enthält bereits den NetWorker-Client. Wenn vor der Fertigstellung des Images der NetWorker-Client bereits einmal gestartet wurde, enthalten die in der Folge aus diesem Image erstellten Maschinen alle das selbe Zertifikat.
Lösung:
Auf den Client Maschinen muss das bestehende Zertifikat durch ein neues ersetzt werden.Hierbei sollte man darauf achten, dass auch der in der NSRLA Ressource verwendete Host-Name korrigiert wird. - Beim ersten Start des NetWorker-Client-Daemons hatte die Maschine noch keinen Hostnamen
In diesem Falle ist der Host-Name in der NSRLA Ressource localhost. Dies kann bei späteren Kommunikationen zwischen NetWorker-Server und NetWorker-Modulen zu Problemen führen. Sollte eine NetWorker-StorageNode mit einem solchen Zertifikat aufgebaut worden sein, so kann das den ganzen NetWorker-Server lahm legen!
Lösung:
Auch hier muss auf den betreffenden Maschinen ein neues Zertifikat generiert werden. - Der Client wird von einer alten Fujitsu-NetWorker Version (z.B. 7.4) upgegraded
In diesem Fall wird das Zertifikat aus mir nicht bekannten Gründen nicht mehr akzptiert und die Clients Sicherung lässt sich nicht mehr starten!
Lösung:
Auch hier muss auf den betreffenden Maschinen ein neues Zertifikat generiert werden. - In dem Attribut 'auth methods' der NMC wurde der Eintrag nsrauth entfernt
Auf Grund von "falschen" Problemlösungen, betreffend der SSL Fehlermeldungen in der NetWorker-Protokolldatei daemon.raw, wurde der Wert nsrauth aus dem Attribut auth methods entfernt. Hierdurch gibt es zwar keine Fehlermeldungen mehr wegen falscher Zertifikate, aber es kann auch keine sichere Verbindung zwischen den NetWorker Instanzen mehr erstellt werden. Wenn auf dieser Maschine später ein NetWorker-Modul oder die NetWorker-Management-Console laufen soll, verweigern diese ihren Dienst.
Lösung:
Das Attribut auth methods korrigieren und die falschen öffentlichen Schlüssel aus den Peer Information Ressourcen löschen. - Beim ersten Start des NetWorker-Client-Daemons existierte keine "servers"-Datei
Dieser bei Linux Maschinen leider häufig vorkommende Umstand führt gleich zu 2 Problemen:
- Zum Ersten erhält der Benutzer "root" von allen Maschinen durch die Administrator-Liste der NSRLA Ressource Administrationsberechtigung. Das Attribut administrator sieht in diesem Falle etwa so aus:
administrator: root, "user=root,host=xxx";
- Zum Zweiten wird die Client-Authentifizierung zum Teil außer Kraft gesetzt!
Es wird kein Zertifikat auf seine Gültigkeit überprüft. Dies gilt sowohl für den NetWorker-Server, wie für alle anderen Instanzen.
Lösung:
Die NSRLA Ressource und damit auch das Zertifikat der betreffenden Maschine muss nach der Erstellung der Datei "/nsr/res/servers" neu generiert werden. - Zum Ersten erhält der Benutzer "root" von allen Maschinen durch die Administrator-Liste der NSRLA Ressource Administrationsberechtigung. Das Attribut administrator sieht in diesem Falle etwa so aus:
- Achtung: Änderungenan dem Attribut auth methods wirken zum Teil erst nach dem Neustart des NetWorker-Servers oder des betreffenden Client-Daemons.
- Mehrere Maschinen verwenden das gleiche Zertifikat!
Jeder Kommunikationsaufbau zwischen 2 NetWorker-Komponenten, sei es Server zum Client, Ciient zum Serevr, Client zur StorageNode oder NMC zum Server, benötigt einen sogenannten Session-Key. Dieser Session-Key wird von den Client-Daemonen (nsrexecd) der jeweiligen Komponente mit Hilfe eines SSL Verfahrens erzeugt. Hierzu hat jeder nsrexecd eine eigene lokale Client-Ressource (NSRLA), die einen privaten und einen öffentlichen Schlüsselanteil enthält. Die öffentlichen Schüssel werden bei dem ersten Kommunikationsaufbau zweier Komponenten automatisch ausgetauscht und in den folgenden Kommunikationsversuchen jeweils auf ihre Gültigkeit überprüft. Erst nach der erfolgreichen Überprüfung der Schlüssel erhält, der anfordernde Prozess den nötigen Session-Key und die eigentlichen NetWorker Daten können übertragen werden.
Wie oben bereits erwähnt, ist der Client-Daemon nsrexecd zuständig für die Generierung und Übertragung des eigenen Zertifikats aber auch für die Kontrolle und Aufbewahrung der öffentlichen Zertifikatsanteile aller anderen NetWorker-Komponenten.
Wenn beim Start des Client-Daemons kein lokales Zertifikat existiert, generiert der nsrexecd-Prozess ein neues Zertifikat und hinterlegt dieses in die Client eigenen NetWorker-Ressource (NSRLA).
Jeder öffentliche Zertifikatsanteil, der bei einem Kommunikationsaufbau von einer NetWorker-Komponente an den jeweiligen anderen nsrexecd geliefert wird, wird von diesem in einer neuen NSR Peer Information Ressource gespeichert. Diese öffentlichen Zertifikatsanteile werden bei jeder folgenden Kommunikation auf ihre Gültigkeit überprüft.
Ohne Eingriff des NetWorker Administrators hat nur der lokale 'root'-Benutzer der jeweiligen Client-Maschine und der Benutzer 'root' des NetWorker-Servers, das Recht die lokalen Client-Ressourcen (nsrladb) einer NetWorker-Komponente zu administrieren. Dies bedeutet, dass eine Administration zunächst nur mit dem Kommando nsradmin möglich ist. Hierzu startet man das Kommando nsradmin mit der Option "-p nsrexec -s <client name>".
Beispiel:
# echo "print type: nsrla " | nsradmin -i - -p nsrexec
type: NSRLA;
name: xxx.schaefer-tobies.lan;
NW instance ID: \
1156637e-00000004-b830fb8b-50fd6397-00010c00-5d22e929;
certificate: \
"-----BEGIN CERTIFICATE-----
MIIB9DCCAV2gAwIBAQIBADANBgkqhkiG9w0BAQUFADBAMT4wPAYDVQQDEzUxMTU2
NjM3ZS0wMDAwMDAwNC1iODMwZmI4Yi01MGZkNjM5Ny0wMDAxMGMwMC01ZDIyZTky
OTAeFw03MTAxMDEwMDAwMDBaFw0zODAxMTgwMzE0MDdaMEAxPjA8BgNVBAMTNTEx
NTY2MzdlLTAwMDAwMDA0LWI4MzBmYjhiLTUwZmQ2Mzk3LTAwMDEwYzAwLTVkMjJl
OTI5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9+t2I9S+igGRFre7Y+Uz5
d+7oAtmD8rpSZiyM3BrzK3fquFfNGE/7CqYD47Zda5vSvgb8VFuhKj9Tc8giK1ZA
iMG6Rrarg+mXSJDrqBo7g2ojzc7LV3W9ORFnkzNsssHlJGfqrTkO75Z+oDTqGmoq
fIPSVyjecI6osvDt/rqwEwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAEehNPAey6DY
uc1bivxL0fny7uBzwftHueyregurb8IBaZ4ncAiGdPKATNCV9zRn/qw/1XW+q9ZE
6/OYvCJ1yQpn6XVJFUWAeXAlUy1q9TFYBFjIFT9DlBTaomQcgLdAhW/rtuQxyAUu
ayMnxWXNraFL9DE5c+wPIb0pHm/q5Z+l
-----END CERTIFICATE-----";
private key: Not enough privileges to view this attribute;
auth methods: "0.0.0.0/0,nsrauth/oldauth";
max auth attempts: 8;
administrator: "isroot,host=yyy",
"user=root,host=localhost",
"user=root,host=xxx.schaefer-tobies.lan";
arch: x86_64;
kernel arch: x86_64;
CPU type: x86_64;
machine type: desktop;
OS: Linux 3.0.76-0.11-default;
NetWorker version: 8.1.1.6.Build.321;
client OS type: Linux;
In dieser NetWorker-Client Ressource kann man dem Attribut "administrator" entnehmen, wer diese Ressource und damit auch die gesamte Client-Ressource-DB (nsrladb) administrieren kann. In unserem Beispiel kann man erkennen, dass hierzu im allgemeinen nur der Benutzer "root" der lokalen Maschine ("user=root,host=localhost") und der "root"- bzw. "System"- Benutzer des NetWorker-Servers ("isroot,host=sim-nw-8") berechtigt sind. Möchte man nun einen NMC-Benutzer dazu berechtigen, die lokalen Ressourcen eines NetWorker-Clients zu berabeiten, so muss sowohl der Dienste-Benutzer der NMC selbst, als auch der NMC-Benutzer in obige Administratoren-Liste eingetragen werden. Selbst wenn also die NMC auf dem selben Rechner wie der NetWorker-Server läuft, fehlt hier immer noch der Anmelde-Benutzer der NMC (z.B. Administrator). Erst wenn man diesen mit Hilfe des Kommandos nsradmin hinzugefügt hat, kann man die lokale Client-Ressource und die von diesem Client-gesammelten Schlüssel mit Hilfe der NMC verwalten.
Da der Benutzer "root"vom NetWorker-Server das Recht hat alle Client-Ressourcen zu administrieren, kann man mit Hilfe eines nsradmin-Skriptes allen NetWorker-Clients das benötigte Recht auf einmal eintragen lassen. Entsprechende Beispiel-Skripte werden unter anderem in unserem NetWorker Advanced Workshop erstellt. Wir haben aber auch eine fertige Skriptlösung, die es auf Basis der Programmiersprache Python ermöglicht, auf allen Clients eines NetWorker-Servers die Administratoren-Liste gleich zu halten, bzw neue Administratoren hinzuzufügen.
Nach der Installation einer NetWorker Client Paketes ist die Kommunikation zwischen diesem Client und dem NetWorker Server keinesfalls bereits abgesichert. Denn zusätzlich zu dem hier beschriebenen Kommunikationsverfahren (das auch nsrauth genannt wird) besitzt NetWorker noch sein altes Authentifizierung-verfahren, das lediglich die Übereinstimmung von Namen überprüft (auch oldauth genannt). Im Default Falle führt jede NetWorker-Instanz (seit Version 7.3) das nsrauth Authentifizierung-Verfahren durch, jedoch wenn dieses nicht erfolgreich war, fällt die Kommunikation auf das alte (oldauth) Verfahren zurück.Dies wird durch das Attribut "auth methods" (siehe obiges Beispiel) definiert. Möchte man die NetWorker-Kommunikation folglich auf das sichere Verfahren einschränken, so muss dieses Attribut auf allen NetWorker-Komponenten angepasst werden. Dies kann man zwar auch mit der NMC erreichen, bei mehr als 10 Clients empfiehlt sich hierfür aber ein "nsradmin-Skript".
Falls sie noch weiter gehenden Bedarf haben in die Thematik einzusteigen, empfehle ich ihnen unseren NetWorker Advanced Workshop zu besuchen. Hier arbeiten wir alle genannten Punkte theoretisch aber auch praktisch in Übungen durch.