Systemdienste per Webinterface mit php steuern?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Systemdienste per Webinterface mit php steuern?

Beitrag von tobitux » 08.08.2004 17:14:19

Hallo

Ich möchte einige Dienste eines woody Servers durch ein Webinterface mit Php Scripten steuern (starten, stoppen, etc.). Mit anderen Worten möchte ich shell Kommandos ausführen und dafür benötige ich eben höhere Rechte, als die des Apache Users.

Ich habe einige Zeit nach Möglichkeiten gesucht und sämtliche Lösungsvorschläge gefunden, angefangen beim ändern des Apache Users auf root, bis hin zu speziellen Apache Modulen.

Den Apache als root laufen zu lassen, mag zwar funktionieren aber das halte ich für sehr gefährlich.
Welche Möglichkeit ist da am sichersten und am empfehlenswertesten?

Es gibt ja auch etliche Webfrontends für administrative Aufgaben, welche ebenfalls root Rechte haben müssten. Wie wird das hier gemacht ohne das die Sicherheit leidet?

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 08.08.2004 17:56:03

Hi,

ich bin mir nicht ganz sicher was eigentlivh deine Frage ist, suchst du Tips zur Konfiguration, oder eine SW die Dienste fuer dich starten kann. Wenn ich nicht irre, waere "webmin" geeignet, Dienste und die komplette Administration des Servers zu uebernehmen. Da gibt's sicherlich auch Info's zur Konfiguration.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Beitrag von tobitux » 08.08.2004 17:59:07

Ja sowas wie Webmin geht in die richtige Richtung aber ist viel zu groß für meinen Einsatzzweck deshalb möchte ich selbst ein kleines Webinterface mit php Scripten bauen.

Und da suche ich nun nach einer sicheren Möglichkeit, daß die Scripte Befehle ausführen drüfen, was man normal nur als root darf.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 08.08.2004 18:04:19

Selbst schreiben ist die eine Variante, WebMin und co. solange zu beschneiden, bis der Rest an Funktion uebrig bleibt den du brauchst, waere die andere. So, oder so, kann man sicherlich was davon lernen.
Da ich ab und an auch mal PHP code, koennte ich dir bei speziellen Fragen vielleicht helfen, so global halt nicht.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Beitrag von tobitux » 08.08.2004 18:23:12

Ich müsste eigentlich nur wissen, wie ich ein PHP Script laufen lassen kann, das darin Befehle mit root Rechten ausgeführt werden können.

Beispiel:
Ich möchte samba starten, also schreibe ich beispielsweise folgenden Code ins PHP Script.

Code: Alles auswählen

shell_exec("/etc/init.d/samba start")
Als root ausgeführt, müsste das funktionieren aber nicht als user www-run, mit dem der Apache und damit auch die geparsten PHP Scripte laufen. Und hier suche ich eben eine Möglichkeit, Befehle als root auszuführen, ohne jetzt die Gesamtsicherheit des Systems zu beeinträchtigen. Von daher fallen solche Möglichkeiten weg, wie den Apache mit root Rechten laufen zu lassen.

LittleBoy
Beiträge: 718
Registriert: 30.04.2002 14:32:26

Beitrag von LittleBoy » 09.08.2004 09:39:04

Generell ist es erstmal keine gute Idee, PHP in irgendeiner Form root-Rechte zu geben. Ein kleiner Fehler im SKript reicht dann schon aus, um einen ggf. Angreifer die volle Kontrolle über das System zu geben.

Für dein Vorhaben kommst du aber nicht drumherum. Du musst die Shell-Befehle in ein sudo "einpacken".

kellerpunk
Beiträge: 58
Registriert: 09.12.2003 21:04:59
Kontaktdaten:

Beitrag von kellerpunk » 09.08.2004 13:11:12

wenn eine verzögerung bei der ausführung tragbar ist den befehl in eine datei schreiben und diese per cronjob ausführen. alternativ wegen der sicherheit nicht die datei selbst ausführen sondern in die datei wörter reinschreiben, nach deren bedeutung per cronjob geparst wird

tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Beitrag von tobitux » 09.08.2004 22:55:36

Eine Verzögerung ist leider schlecht. Wie machen es denn die diversen PHP Webinterfaces, die es bisher so gibt?

kellerpunk
Beiträge: 58
Registriert: 09.12.2003 21:04:59
Kontaktdaten:

Beitrag von kellerpunk » 10.08.2004 01:43:27

ich denke, bzw soweit ich das sehe -.- verwenden die einen daemon der im hintergrund läuft und sich zwar mich den befehlen per php ansprechen läßt, aber darauf mit den root rechten, unter denen er selber läuft reagiert.


um root rechte für mindestens einen prozess kommst du jedenfalls nicht herum

LittleBoy
Beiträge: 718
Registriert: 30.04.2002 14:32:26

Beitrag von LittleBoy » 10.08.2004 10:36:34

Wie gesagt: Nimm sudo. Das ist das wohl einzig mögliche, ohne direkt den Apache komplett mit root-Rechten laufen zu lassen (wobei das gar nicht geht).

tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Beitrag von tobitux » 10.08.2004 17:43:20

Alles klar, werde mir da mal weitere Infos zu suchen.

Benutzeravatar
Raoul
Beiträge: 1435
Registriert: 20.05.2003 00:16:35
Lizenz eigener Beiträge: neue BSD Lizenz
Kontaktdaten:

Beitrag von Raoul » 10.08.2004 18:20:45

ändere Deine /etc/sudoers:
# Host alias specification
Host_Alias LOCALHOST = localhost, dein.voller.servername, serveralias

# Cmnd alias specification
...
Cmnd_Alias MLDONKEY = /etc/init.d/mldonkey-server

# User privilege specification
...
www-data LOCALHOST = NOPASSWD: MLDONKEY
Der Befehl, den www-data dann ausführen muß, lautet

Code: Alles auswählen

sudo /etc/init.d/mldonkey-server start
Alternativ solltest Du dir mal suexec [1] anschauen, das ist wohl die sauberste Lösung. Damit kannst Du zwar auch keine root Rechte erlangen, aber Du kannst Befehle unter einer anderen Benutzerkennung als der des Apachen ausführen. Dann legst Du einen extra Account dafür an, und der bekommt dann die Rechte in der /etc/sudoers.

Hoffe, das war verständlich :-)
Raoul

[1] http://httpd.apache.org/docs/suexec.html

Code: Alles auswählen

grep -ir fuck /usr/src/linux

tobitux
Beiträge: 118
Registriert: 26.03.2004 23:41:10

Beitrag von tobitux » 10.08.2004 19:24:17

Vielen Dank für die Infos.

Antworten