Per Web ein Skript starten

  • Hallo,


    auf meinem Pi läuft ein kleiner Homeserver. Ich möchte mir einen kleinen Adminbereich schaffen, indem ich per Webzugriff einige Skripte, die sich auf dem Pi befinden starten lassen will.
    Ich kenne mich (noch) nicht mit Python aus, allerdings kann ich die andere Websprachen wie PHP oder JS. Die Skripte, die aufgerufen werden, sind bereits fertig.


    Ist das überhaupt ohne weiteres möglich? Wenn ja, könnte mir jemand helfen, wie das zu machen wäre?


    LG
    mlt

  • Hallo,


    danke für den Tipp.
    Ich habe es versucht mit shell_exec zu lösen, aber habe ein Problem, da ich "sudo sh script.sh" ausführen muss (da eine Datei geschrieben wird). Wenn ich es so in die Shell eingebe, funktioniert es, der PHP Code allerdings nicht:

    Code
    $out = shell_exec("sh /home/pi/script.sh");
    echo $out;


    Ich habe dann ein wenig gegooglet und versucht in die /etc/sudoers Datei "nobody ALL = NOPASSWD: /bin/sh " zu schreiben und sudo neuzustarten ( /etc/init.d/sudo restart ), jedoch klappt es auch damit nicht. (Auch wenn ich shell_exec("sudo sh ...") schreibe, kann das script nicht schreiben..


    Weiß jemand Rat?


    LG
    mlt

  • Quote from agent47 pid=4908 dateline=1359691800


    Bei den meisten webwervern läuft php unter dem benutzer www-data, den musst du in die sudosers datei eintrsgen am besten mit visudo um fehler zu vermeiden die dich aus dem system aus sperren und dannach ab und wieder an melden


    Ist visudo ein Programm mit Oberfläche und was habe ich zu ändern? Ich arbeite via SSH mit dem Pi, bin aber Neuling was Linux(befehle) angeht.

  • Visudo ist eine Erweiterung für vi (Kommandozeilen Texteditor) um die sudosers Datei sicher bearbeiten zu können. Wenn in der sudosers Datei ein Syntaxfehler abgespeichert wird und da reicht schon wenn keine Leerzeile am ende der Datei ist sperrst du dich aus dem System aus und kannst dich nicht mehr als Root anmelden.


    Mit folgendem Befehl startest du Visodo


    Code
    sudo VISUDO


    dannach fügst du am ende der Datei folgende Zeile ein (Wichtig danach muss noch mindestens eine Leerzeile kommen!)


    Code
    www-data ALL=(ALL) NOPASSWD: ALL


    Damit gibst du dem www-data User die Möglichkeit mit dem sudo Befehl auch alles mit Rootrechten ohne Passwortabfrage aus zu führen.

  • Die Frage ist nur, ob man so ein Loch in die Sicherheit des Rechners reißen will. Besser währe es, die Dateirechte des Scripts so zu setzen, daß www-data das ohne Root-Rechte nutzen kann.

    Edited once, last by orb ().

  • Ich versuche seit Tagen über die weboberfläche direkt an die Konsole zu gelangen ( wahrscheinlich falsch ausgedrückt )


    Zum Beispiel Apache restart
    $ sudo /etc/init.d/apache2 restart


    Oder sowas wie


    $ sudo ./raspberry-remote/send 00001 1 1


    Leider passiert exakt nix.


    Jemand ne Idee?


    Lg

  • Wenn du die Rechte via visudo gegeben hast dann schreib doch ein skript, dass deine Eingabe via shell_exec ausführt.


    PHP
    <form method="post">Befehl eingeben: <input type="text" name="command" /><input type="submit"></form>
    <?php
    if (isset($_POST["command"]))
    $out = shell_exec($_POST["command"]);
    ?>


    würde ich allerdings nicht machen, da sehr unsicher.




    Mich interessiert noch, wie man nur einzelnen Skripten sudo Rechte geben kann?

  • Danke


    aber warum auch immer Funkt nicht


    Nutze das debian-wheezy-raspberry-pi-minimal-image!


    Kann das daran liegen?

  • Quote from mlt pid=5459 dateline=1360343985


    Mich interessiert noch, wie man nur einzelnen Skripten sudo Rechte geben kann?


    Garnicht.
    Du gibst in der Datei /etc/sudoers einem Benutzer (hier dem des Webservers also www-data) Rechte einen Befehl/ein Script mit Root-Rechten auszuführen.
    Da ist normal nur der Nutzer PI eingetragen, deßhalb funktioniert das nur, wenn man www-date auch noch Rechte gibt. Allerdings würde ich die umfassenden Rechte die Agent47 vorgeschlagen hat nur auf einem Testsystem ohne Internetanbindung setzen.

    Edited once, last by orb ().

  • Quote from orb pid=5808 dateline=1360833829


    Du gibst in der Datei /etc/sudoers einem Benutzer (hier dem des Webservers also www-data) Rechte einen Befehl/ein Script mit Root-Rechten auszuführen.
    Da ist normal nur der Nutzer PI eingetragen, deßhalb funktioniert das nur, wenn man www-date auch noch Rechte gibt. Allerdings würde ich die umfassenden Rechte die Agent47 vorgeschlagen hat nur auf einem Testsystem ohne Internetanbindung setzen.


    Stimmt das dann so?


    Code
    pi ALL=(ALL) NOPASSWD: ALL
    www-data ALL=NOPASSWD: ALL



    Was meinst du mit Agent47? Habe ich noch nie gehört..

  • Die Antwort sollte lauten:


    DAS MACHT MAN NICHT


    Denn das ist alles, nur nicht sicher.


    Man könnte, wenn man es so einrichten kann, vordefinierte Scripte ausführen lassen.
    Scripte, die auch unter einem anderen Benutzer laufen können, so dass der Webserver-Benutzer das System nicht kaputt machen kann.


    Dazu erstellt man die benötigten Scripte so, dass sie ohne Aufrufparameter das machen, was man wünscht.
    Mit minimalen Rechten.


    Des weiteren erstellt man einen Cronjob, der jede Minute nachsieht, ob bestimmte Dateien erstellt wurden.
    Gibt es eine passende Datei, wird das damit verbundenen Script aufgerufen und die Datei gelöscht.


    damit kann man durch setzen eine bestimmten Datei in einem bestimmten Verzeichnis mit einem bestimmten Inhalt auch über das Internet erstellen und Programme auf seinem Computer ausführen lassen.


    Ohne dass der Aufruf aus dem Internet gefährliche Daten einschmuggeln kann.


    Es wird nur nach der Datei/Inhalt gesehen, und dieses als Anlass genommen, etwas auszurufen, das unabhängig vom Webserver läuft.


    Damit muss der Cronjob nur die Datei löschen können, die vom Webserver erstellt wurde.
    Das kann man durch passende Gruppenrechte in einem nur dafür vorgesehen Verzeichnis sauber erledigen.
    ------------


    Ich programmiere auf so eine Weise Ein TV-Aufnahmesystem von Unterwegs.

    Selber denken,
    wie kann man nur?

    Edited once, last by Rasp-Berlin ().