Seite 1 von 1

Server Status und Steuerung mit Lighttpd und Python

Verfasst: Freitag 17. Oktober 2008, 18:32
von arghargh
Hi,

ein kleiner ARM-Debian-lighttpd (Linksys NSLU-2) Webserver soll über ein Web-Interface gesteuert werden. Python ist über mod_cgi angebunden und ich kann ein print "Content-type:text/plain\n\nhello world" ausführen.

Jetzt möchte ich mir Prozesse und Speicherauslastung anzeigen lassen und ein Skript für Neustart und Shutdown fabrizieren. Das muss noch nichtmal irgendwelche HTTP-Methoden unterstützen, der einfache Aufruf http://server/shutdown.py reicht mir schon.

Für die Status kann ich mir vorstellen, das ähnlich popen("ps -aux") zu erreichen. Aber wie ist das mit Runterfahren und Neustart?
Der Interpreter muss auf jeden Fall noch die Ausgabe der Befehle zum Client leiten, und sich dann selbst beenden.

Danke schonmal!

Verfasst: Montag 20. Oktober 2008, 19:37
von Y0Gi
Ich vermute, ein über ``subprocess`` abgesetztes ``halt``, ``init 0`` oder ``init 6`` wird sich schon seinen Weg bahnen und alles um sich herum abhängen ;)

Verfasst: Montag 20. Oktober 2008, 20:45
von Leonidas
In dem Fall reicht wohl schon ein ``subprocess.call()``. Am besten via sudo den Befehl zum herunterfahren absetzen und nicht auf die Idee kommen das Python-Skript setsuid zu setzen :)

Verfasst: Montag 20. Oktober 2008, 20:52
von lunar
Was nicht funktionieren würde ...

Verfasst: Montag 20. Oktober 2008, 21:44
von veers
Kein Problem, einfach setuid auf den Interpreter :wink:

Verfasst: Montag 20. Oktober 2008, 22:11
von Leonidas
lunar hat geschrieben:Was nicht funktionieren würde ...
Hmm? Wenn man für den User unter dem der Interpreter läuft, einen Eintrag mit NOPASSWD in der sudoers hat, der die ausführung vom entsprechenden Shutdown-Befehl erlaubt, wo sollte da das Problem sein?

Verfasst: Montag 20. Oktober 2008, 22:22
von lunar
Mein Posting bezog sich auf den letzten Teil deines Postings: "[...] das Python-Skript setsuid zu setzen. [...]".

Verfasst: Montag 20. Oktober 2008, 22:49
von Leonidas
lunar hat geschrieben:Mein Posting bezog sich auf den letzten Teil deines Postings: "[...] das Python-Skript setsuid zu setzen. [...]".
Ah stimmt, hast recht. Das ist mir entfallen. Wenn man ausreichend verrückt ist, könnte man aber einen binären Preloader reinmachen, der dann das Skript aus seinem Inhalt extrahiert und als root ausführt ;)