.PHP?XY=XZ

  • Hey,


    Ich wusste nicht wie ich den Beitrag nennen sollte, hoffe mal das passt so.
    Ich habe eine index.php. Ich möchte sagen dass wenn ich z.B. /index.php?service=motion eingebe dass er dann die Webseite normal lädt aber dann beispiel ausführt "sudo service motion start".
    Ich finde aber leider nichts dazu wie ich das "deklarieren" kann.

  • Hallo,


    das, zeigt recht übersichtlich die basics.Ausführen kannst du Befehle dann mittels shell_exec().

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Das ist glaube ich nicht dass was ich suche.
    Ich meine,
    Wenn ich z.B. index.php/service=motionstart aufrufe,
    dass er dann z.B. mittels exec "sudo service motion start" ausführt.

  • Dann, ist es genau das was du brauchst ;). Es sind ja nur Beispiele, ob da nun name=joe oder service=motionstart steht, spielt ja keine Rolle. Die Anwendungsweise ändert sich nicht.


    PHP
    <?php
    if ($_GET["service"] == "motionstart"){
    shell_exec("sudo service motion start");
    }
    ?>


    Nun kannst du mit ?service=motionstart den gewünschten Befehl ausführen. Aber, Obacht, ganz so einfach klappt klappt das mit sudo Befehlen in shell_exec nicht. Denn php wird unter dem User apache (wenn man den Apachen installiert hat) ausgeführt, dieser darf, in der Basis configuration, keine sudo Befehle ausführen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Ja das findest du doch im link von dbv...


    If ($_GET[service] == "motion") {
    Xyz ausführen...
    }

  • Danke schon mal für eure Hilfe.
    Leider tut sich beim aufruf von "XXX/index.php?service=motionstart"
    Garnichts. Hab es auch schon mit anderen Befehlen versuch , leider auch erfolglos.
    Den PHP Code hab ich ans Ende der Datei gepackt. Alles andere ist in HTML geschrieben.


    EDIT:
    Gerade gelesen das es mit Sudo nicht geht, gäbes es da eine andere Möglichkeit das Trozdem auszuführen?
    Ginge das wenn ich z.B. damit dann eine Shell starte, wo der Befehl drinne steht?

  • Das nicht passiert glaub ich nicht ;), aber dafür gibts ja log files.
    mach mal

    Code
    tail -f /var/log/apache2/error.log


    dann refreshst du mal dein seite.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Edited once, last by dbv ().

  • Beim Aufruf von index.php :

    Code
    [Thu Jul 18 22:40:00 2013] [error] [client 192.168.178.26] PHP Notice:  Undefined index: service in /var/www/index.php on line 43


    Line 43:

    Code
    if ($_GET["service"] == "motionstart"){



    Beim Aufruf von index.php?service=motionstart


    Ich glaub da ist etwas mit den Sudo Berechtigungen falsch oder?


    EDIT:
    Gefixt mit

    Code
    sudo chown -R root /var/lib/sudo


    Geht aber immer noch nicht. Jetzt kommt


    sudo: no tty present and no askpass program specified


    War aber vorher auch schon.

  • Hast du denn denn die soduers angepasst, damit er sudo befehle ausführen darf?Stichwort NOPASSWD?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Gerade gemacht. Hab:
    APACHE ALL = (ALL) NOPASSWD: ALL
    Eingefügt in: /etc/sudoers.tmp (sudo visudo)
    Geht aber leider nicht.

  • Geht nicht ist keine gültige Fehlermeldung :). Sagt das log immer noch das gleiche?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Habs rausgefunden!
    Lösung:


    1. Der Username war Falsch, Ich schreib "apache" hin es musste aber "www-data" dort stehen.
    Das hatte ich mit:

    PHP
    <?php
    exec('whoami');
    ?>


    rausgefunden.


    2. Ein schreibfehler war drinne. Hab zum Schluss statt "ALL", "ALLL" geschrieben.


    Danke für eure Hilfe!:)