Ich richte Nagios auf einigen meiner Linux-Server ein und bin auf ein Problem gestoßen. Das check_ide_smart
Plugin benötigt Root-Zugriff auf das System, um ausgeführt zu werden. Um es auszuführen, verwende ich das check_by_ssh
Plugin, um in das Nagios-Konto auf dem Remote-Host zu ssh und dann check_ide_smart
mit sudo auszuführen .
Ich habe zunächst die folgenden Zeilen hinzugefügt /etc/sudoers
, damit das Programm funktioniert:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Während dies bei lokaler Ausführung einwandfrei funktionierte, trat beim Ausführen von Nagios ein Problem auf: Es wurde kein TTY erzeugt, wodurch das Plugin nicht mehr funktionierte.
Ich habe in der Manpage nach sudo gesucht und die Option -s gefunden, die eine Shell erzeugt und das Programm dort ausführt. Als ich versuchte, es zu verwenden sudo -s
, stieß ich auf Berechtigungsprobleme, da das -s anscheinend den Befehl in ändert /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, was in der sudoers-Datei nicht zulässig ist. Ich habe versucht, die sudoers-Datei so zu ändern, dass stattdessen dieser Befehl verwendet wird, aber das hat nicht funktioniert, und die Verwendung von Anführungszeichen ist ein Syntaxfehler.
Ich habe es schließlich zum Laufen gebracht, indem ich die folgende Zeile in verwendet habe /etc/sudoers
:
nagios ALL=/bin/bash
Das fühlt sich für mich wirklich falsch an, da ich dem Nagios-Benutzer erlaube, eine Root-Shell zu erzeugen, mit der er alles machen kann.
An diesem Punkt dachte ich, dass es vielleicht funktionieren würde, wenn ich den Befehl in ein Shell-Skript setze, für das der Nagios-Benutzer schreibgeschützte Berechtigungen hat. Deshalb habe ich ein Shell-Skript erstellt:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Leider konnte ich die übergebenen Parameter ( Bearbeiten: Ich musste das zitieren, $@
) nie richtig mit dem Plugin arbeiten lassen, daher weiß ich nicht, ob dies funktionieren würde. $@
damit es funktioniert. Danke @derobert und @pjz. Ich weiß immer noch nicht, ob es funktionieren würde, da ich es mit der Lösung von @Mike Arthur zum Laufen gebracht habe.
Gibt es eine Möglichkeit, sudo -s
an die Arbeit zu gehen, ohne das Laichen einer Wurzelschale zuzulassen?
Antworten:
Folgende Zeile wurde hinzugefügt zu /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Beachten Sie das nachfolgende Sternchen. ohne das geht das nicht. Danke @Mike Arthur für die Antwort.
Zu Ihrer Information, Sie müssen $ @ in Ihrem Shell-Skript angeben, damit es richtig funktioniert:
$@
ist magisch. Aus der Bash-Manpage,Außerdem wird durch das Starten von Bash kein Pty erzeugt. obwohl ich ratlos bin, warum Ihr Nagios-Plugin ein Terminal benötigt, um ausgeführt zu werden. Es sollte nicht. Vielleicht ist das eigentliche Problem die Umweltsanierung von sudo?
quelle
Anstatt
sudo -s
eine Root-Shell zu verwenden und zu starten, erlauben Sie Ihrem Nagios-Benutzer einfach, sudo ohne tty zu verwenden!requiretty
. Sie/etc/sudoers
sollten Folgendes haben:... die direkten Sudo-Zugriff ohne Passwort und ohne tty ermöglichen. Sie können das "check_ide_plugin" deaktivieren, wenn Sie Sudo-Zugriff auf alle Plugins wünschen.
Wir verwenden auch NRPE, das ein wenig sicherer als check_by_ssh zu sein scheint, aber etwas mehr Setup erfordert. Gleiche Idee in / etc / sudoers tho, tausche einfach Nagios mit nrpe. :) :)
~ Tommy
quelle
Versuchen Sie das Skript erneut, aber setzen Sie doppelte Anführungszeichen um Ihr $ @:
quelle
Ich denke nicht, dass es möglich ist, -s zu verwenden, ohne eine Root-Shell zu erzeugen (vorausgesetzt, Sie benötigen Root-Berechtigungen). Die Option -s ist speziell dazu da, eine Shell zu erzeugen. Das bedeutet -s. Aus Sudo (8):
quelle
/bin/bash
, wodurch auch eine interaktive Shell ohne Einschränkungen und ohne Einschränkungen für das Aufrufen von Befehlen erzeugt werden kann.