Einschränkung der Verwendung von "sudo -s"

8

Ich richte Nagios auf einigen meiner Linux-Server ein und bin auf ein Problem gestoßen. Das check_ide_smartPlugin benötigt Root-Zugriff auf das System, um ausgeführt zu werden. Um es auszuführen, verwende ich das check_by_sshPlugin, um in das Nagios-Konto auf dem Remote-Host zu ssh und dann check_ide_smartmit 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 ( $@) nie richtig mit dem Plugin arbeiten lassen, daher weiß ich nicht, ob dies funktionieren würde. Bearbeiten: Ich musste das zitieren, $@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 -san 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.

Chris Lieb
quelle

Antworten:

7

nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *

Dies sollte funktionieren und Argumente zulassen.

Mike McQuaid
quelle
Das hat nicht funktioniert. Siehe meine Bearbeitung für Details.
Chris Lieb
@ Chris Lieb: Sie müssen Ihren Anruf von "sudo -s ..." in "sudo / bin / bash -c ..." ändern. Dann sollte es funktionieren. Ich habe ein ähnliches Setup, das hier funktioniert (nicht Nagios, aber ähnlich).
Martin C.
Ich habe es behoben, versuche es jetzt (mit dem Sternchen für Platzhalter).
Mike McQuaid
2

Zu Ihrer Information, Sie müssen $ @ in Ihrem Shell-Skript angeben, damit es richtig funktioniert:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"

$@ist magisch. Aus der Bash-Manpage,

@ Erweitert auf die Positionsparameter, beginnend mit eins. Wenn die Erweiterung in doppelten Anführungszeichen erfolgt, wird jeder Parameter zu einem separaten Wort erweitert. Das heißt, "$ @" entspricht "$ 1" "$ 2" ... Wenn die Erweiterung in doppelten Anführungszeichen innerhalb eines Wortes auftritt, wird die Erweiterung des ersten Parameters mit dem Anfangsteil des ursprünglichen Wortes und der Erweiterung verbunden des letzten Parameters wird mit dem letzten Teil des ursprünglichen Wortes verbunden. Wenn keine Positionsparameter vorhanden sind, werden "$ @" und $ @ zu nichts erweitert (dh sie werden entfernt).

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?

derobert
quelle
Dieses Plugin ist das einzige, das Probleme verursacht hat. Keiner der anderen, die ich bisher eingerichtet habe, erfordert Root-Zugriff, sodass ich für sie kein sudo verwenden musste. Aus diesem Grund bin ich mir nicht sicher, ob das Problem dadurch verursacht wird, dass sudo keine Shell erzeugt oder dass das Plugin check_ide_smart eine Shell zum Ausführen benötigt.
Chris Lieb
1

Anstatt sudo -seine Root-Shell zu verwenden und zu starten, erlauben Sie Ihrem Nagios-Benutzer einfach, sudo ohne tty zu verwenden !requiretty. Sie /etc/sudoerssollten Folgendes haben:

# Allow Nagios extra privs
Defaults:nagios !requiretty
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_plugin

... 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

TommyTheKid
quelle
0

Versuchen Sie das Skript erneut, aber setzen Sie doppelte Anführungszeichen um Ihr $ @:

#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin "$@"
pjz
quelle
-1

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):

-s [command]
    The -s (shell) option runs the shell specified by the SHELL
    environment variable if it is set or the shell as specified
    in passwd(5).  If a command is specified, it is passed to
    the shell for execution.  Otherwise, an interactive shell
    is executed.
Christopher Cashell
quelle
1
Eine Shell wird ausgeführt, aber seine derzeitige Aufgabe besteht darin, jeden Aufruf zuzulassen /bin/bash, wodurch auch eine interaktive Shell ohne Einschränkungen und ohne Einschränkungen für das Aufrufen von Befehlen erzeugt werden kann.
Martin C.