Wie führe ich Root-Aktionen von einem Nicht-Root-Konto aus durch?

15

Ich möchte Dienste von einem PHP-Skript aus neu starten können. Laufen unter dem WWW-Benutzerkonto.

Was ist die bevorzugte Methode, um diese Aktionen auszuführen?

Ich denke, ich kann platzieren, um eine Datei mit que'd Befehlen zu erstellen, die von CRON gelesen werden, aber die Lösung juckt.

Ich denke an einen winzigen Dienst, der unter root ausgeführt wird und vordefinierte "Methoden" zulässt, sodass keine willkürlichen root-Aktionen ausgeführt werden können.

Gibt es ein Tool dafür?

user65297
quelle
@ MadHatter, Mona Lisa sendet ihre Grüße
;-)

Antworten:

27

Sie könnten das Rad neu erfinden, aber ehrlich gesagt verwende ich dafür passwortloses sudo. Beispielsweise muss mein Überwachungssystem einen Befehl ausführen können, um das Hardware-RAID zu überprüfen. Dies erfordert Root-Rechte, aber ich möchte nicht das gesamte Überwachungssystem als Root ausführen, sondern in sudoerseiner Zeile, in der es heißt

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

Führen Sie dann den Befehl sudo /usr/lib/nagios/plugins/check_md_raidals überwachender Benutzer aus, wenn ich das RAID überprüfen muss.

Sie könnten eine sudoers Linie haben, die sagte

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

dann muss php ausgeführt werden sudo /etc/rc.d/init.d/myservice restart.

MadHatter unterstützt Monica
quelle
2
Dies ist der Weg zu IMO. Ich habe diesen Prozess für eine ähnliche Aufgabe verwendet. Es ist seit über 3 Jahren in Produktion. Nichts ist jemals ausgefallen und das Sicherheitsrisiko ist so gut wie nicht vorhanden, solange Sie den PHP-Code schützen, der ihn ordnungsgemäß mit Ihrer Anwendungslogik auslöst.
Andrew Ensley
1
Vielen Dank, Sudoer, die neu für mich sind und genau ins Schwarze treffen. @ Andrew, danke für die zusätzlichen Infos.
user65297
1
user65927, verzeihen Sie mir, wenn Ihnen dies nicht neu ist, aber die lokale Etikette besagt, dass Sie eine Frage akzeptieren, wenn Sie eine zufriedenstellende Antwort haben, indem Sie auf das Häkchen neben der Frage klicken.
MadHatter unterstützt Monica
1
Möglicherweise müssen Sie auch die Zeile "Defaults requiretty" in Ihrer sudoers-Datei auskommentieren. Dieser Schritt hat mich ein paar Mal getroffen. (ZB "Defaults requiretty" in "#Defaults requiretty" ändern)
steve.lippert 10.10.11
6

Sehen Sie sich sudo an : Hier können Sie Aktionen angeben, die als anderer Benutzer ausgeführt werden können (in Ihrem Fall root).

Sie können zum Beispiel hinzufügen /etc/sudoers(bearbeiten Sie die Datei nicht direkt verwenden visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Siehe man sudofür die Details und die Syntax der Datei

Matteo
quelle
2
Seien Sie sehr vorsichtig, wenn Sie die /etc/sudoersDatei bearbeiten . Wenn es in irgendeiner Weise syntaktisch inkorrekt ist, ist das Zurücksetzen ein Albtraum, sudoin den Sie zurückkehren müssen, aber Sie können nicht, dass Sie Sudo einfach ausgelöscht haben. Am Ende müssen Sie eine Rettungs-CD / DVD verwenden und die Partition manuell mounten.
Puk
1
@puk Um Shudders zu bearbeiten, benötigen Sie Root-Zugriff. Wenn die Datei beschädigt ist, können Sie sich als Root anmelden und sie dann wiederherstellen (von einer Sicherungskopie) oder manuell reparieren. visudo überprüft die Datei vor dem Schreiben auf ihre Richtigkeit.
Matteo
was ist shudders? Es ist wahr, dass Visudo Vernunftsprüfungen durchführt, aber sie helfen nicht, nachdem der Schaden behoben ist: P
puk