Per Web ein Skript starten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • 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

  • Zitat von 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.

  • 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?

  • Zitat von 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.

    Einmal editiert, zuletzt von orb (14. Februar 2013 um 10:25)

  • Zitat von 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..

  • Zitat von mlt pid=5819 dateline=1360842572


    Stimmt das dann so?

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


    Nein.

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

    Ist aber für die Sicherheit des Rechners absolut keine gute Idee.

    Zitat


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

    mlt
    29. Januar 2013 um 19:54
  • 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.

    Computer ..... grrrrrr

    Einmal editiert, zuletzt von Rasp-Berlin (14. Februar 2013 um 14:53)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!