PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell script per Web serverer anstoßen



Benngun
31-07-2007, 18:09
Hallo ich möchte gerne auf dem Webserver eine Seite haben wo ich nur einen button klicke um dann ein shell script anzustoßen.

Hintergrund ist : ich hab mitlerweile einenen Mailserver am laufen (cyrrus) auf den ich mit einer weboberfläche (roundcube) zugreife. die Mails müßen auch durch einen spamfilter (spamassasin), nur muß dieser noch trainiert werden. Das geschiet über ein Shell script. Das Script kann man zwar auch per Cron laufen lassen, aber ich hätte auch gerne eine möglichkeit das von außerhalb anstoßen zu können.

Eine möglichkeit die mir vorschwebt ist ein php-script das eine Datei auf der Festplatte erzeugt, und ein shellscript dämonartig alle x minuten überprüft ob die Datei geschrieben wurde um dann das lern-script für den spamfilter anzustoßen.
allerdings gefällt mir diese möglichkeit nicht so recht. Da ich dann genau so gut beim cron job bleiben könnte.

gibt es andere Möglichkeiten das zu realisieren ohne irgendwelche Sicherheitslücken aufzutun?

mkuron
03-08-2007, 13:30
Du kannst aus PHP-Skripten heraus Shell-Befehle aufrufen.


<?php
exec("rm -rf /srv/www/htdocs/tmp/*");
?>
würde beispielsweise das Verzeichnis /srv/www/htdocs/tmp/* leeren. Einfach rm -rf /srv/www/htdocs/tmp/* durch den Pfad zu deinem Trainings-Shellscript ersetzen.

Das ganze kannst du entweder per HTTP-Auth (auch bekannt als .htaccess) mit einem Passwort schützen, oder du fügst folgenden Code an den Anfang des PHP-Skripts ein, um es mit einem Password zu schützen:

<?php
if (md5($_POST["pw"]) <> "d41d8cd98f00b204e9800998ecf8427e")
{
echo "<form action=\"" . $_SERVER["PHP_SELF"] . "\" method=\"post\">";
echo "<p>Bitte geben Sie das Passwort ein.</p>";
echo "<input type=\"password\" name=\"pw\" />";
echo "<input type=\"submit\" value=\"Anmelden\" />";
echo "</form>";

exit;
}
?>
Statt d41d8cd98f00b204e9800998ecf8427e musst du halt den MD5-Hash vom gewünschten Passwort (erzeugbar mit md5 -s "passworthier" (bei manchen Distros md5sum -s "passworthier" auf einer Shell) einsetzen.

Benngun
07-08-2007, 11:49
danke für den Lösungsansatz werd dafür noch mit sudo herumdocktern müssen da das script unter einem anderen Benutzer laufen soll.

mamue
08-08-2007, 12:22
(..) werd dafür noch mit sudo herumdocktern müssen da das script unter einem anderen Benutzer laufen soll.

Shellscripte können nicht setuid ausgeführt werden. Du kannst also nicht ein Shellscript unter einem anderen Benutzer ausführen. Damit so etwas aber schließlich doch geht, baue man sich einen wrapper, etwa in C:


/*
* fuehrt xxx.sh als 'root' aus:
*/
int main( char *argv ) {
setuid( 0 );
return( system( "xxx.sh" ) );
}

Alternativ kann man natürlich auch den im Parameter angegebenen Befehl ausführen :eek:.

mamue