Webinterface führt Befehl nicht aus

  • Hallo,


    ich habe ein Problem mit meinem Webinterface und ich hoffe ich finde hier hilfe.
    Und zwar habe ich ein Webinterface geschrieben, welches ich bereits bei meinem RaspberryPi 2 in betrieb hatte.
    Nun wollte ich das ganze auf mein BananaPi Umlagern.
    Die Funkantenne habe ich bereits getestet mit

    Code
    sudo ~/raspberry-remote/send 11010 4 0


    das funktioniert einwandfrei. Leider wird es nicht ausgeführt wenn ich im Webbrowser den Button meines Webinterfaces drücke.
    Ich kann mich bei meinem RaspberryPi erinnern das gleiche Problem gehabt zu haben weiß aber nicht mehr wie ich es genau behoben habe.
    Habe bereits so ziemlich alles versucht was die vergabe der Rechte angeht aber evtl. fehlt ja noch etwas anderes.
    In Visudo habe ich

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

    eingefügt.
    Außerdem habe ich die Rechte für www-Data angepasst:

    Code
    sudo chown www-data:www-data /var/www
    sudo chmod 775 /var/www
    sudo usermod -a -G www-data pi


    Mein BananaPi ist nur in meinem Heimnetz in Verwendung, daher ist das Thema Sicherheit nicht so wichtig.


    Das Webinterface Steckdosen.php sieht wie folgt aus:


    Ich bin absolute Leihe in Sachen Skript schreiben, daher kann es durchaus sein das dort der Fehler liegt.


    Über Hilfe bin ich sehr dankbar!


    Liebe Grüße

    Edited once, last by Earthnex ().

  • ~/raspberry-remote/send


    Ist kein absoluter Pfad.


    ~/


    ist das Verzeichnis des aktuellen Benutzers. Der Webserver läuft über den Benutzer www-data. Du hast das aber vermutlich im Benutzerverzeichnis von "pi". Lösung: Absoluten Pfad angeben




    PS: FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

  • Hallo liebes Forum,


    da ich nur wenige Erfahrungen mit Webservern habe, bitte ich euch, mir genau zu erklären, was ich machen muss.


    Aus meiner Sicht könnte ich das gleiche Problem haben. Ich fasse es kurz zusammen.


    1. Der Befehl sudo /home/pi/raspberry-remote/send 11010 1 1 funktioniert einwandfrei über die Konsole
    2. Der Webserver funktioniert einwandfrei, andere php-Dateien (Einschalten und Ausschalten von Funksteckdosen) werden aufgerufen.
    3. Der Befehl exec("sudo /home/pi/raspberry-remote/send 11010 1 1") wird aber nicht ausgeführt in der php-Datei.


    --> gleiche Symptome gleiche Problem!


    Daher habe ich mir den Quellcode kopiert, aber auch in diesem Beispiel funktioniert es bei mir nicht.


    Mit dem Vorschlag, den vollständigen Pfad anzugeben konnte ich nichts anfangen,
    da ja ~ nur im Konsolen-Befehl vorhanden war und den Quellcode nicht beeinflusst.
    Vlt. habe ich aber etwas missverstanden.


    Ich freue mich auf eure Unterstützung

  • Danke für deine Nachricht, aber ich gebe keine relativen Pfade an, sondern nur absolute.


    Laut der Steckdosen.php. des 1. Beitrags sind auch nur absolute Pfade vorhanden. Bsp.
    [font="monospace"]if(isset($_GET['pcan'])){[/font]
    [font="monospace"]exec("sudo /home/pi/raspberry-remote/send 11111 1 1");[/font]
    [font="monospace"]}[/font]


    [font="monospace"]:helpnew: [/font]

  • Guck mal Beitrag#2
    ...Aber dann soll er da lieber direkt nach "steckdosen" suchen :fies:




    RaspSeb: Du hattest geschrieben dass du mit der Aussage "vollständigen Pfad" nichts anfangen konntest. Das habe ich mit "pfade" beantwortet.



    Beitrag#1 ist zudem mit äussester Vorsicht zu betrachten. Lieber nicht machen was da steht - ernsthaft! Derjenige hatte auch Probleme und hat sich mit seiner Vorgehensweise weitere Probleme, die hier aber gar nicht behandelt wurden, geschaffen. Denn Jeder der chmod 775, oder chmod 777 empfiehlt oder anwendet, um ein Rechteproblem zu lösen, gehört eigentlich öffentlich angeprangert. Das ist wie eine weltweite Einladung, das System zu dunklen Zwecken zu missbrauchen, wenn der Rechner auch nur kurz mit dem Internet verbunden ist. (quelle)

  • Hallo Earthnex !


    chmod 775 ist nicht so schlimm, aber chmod 666 (rw-rw-rw), oder 777 (rwxrwxrwx), weil jedermann weltweit Schreibrechte, und damit auch Löschrechte auf ein Verzeichnis samt vererbten Unterverzeichnissen und (fast) allen enthaltenen Dateien bekommt.


    Ich frage mich, wieso Du überhaupt root-Rechte wechselseitig brauchst.
    Einen Teil hast Du in der Gruppenverwaltung schon versucht. Aber wenn der user pi noch gar nicht der Gruppe www-data beigetreten ist, was Du mit < id > schnell herausfinden kannst, dann versuche < sudo usermod -G www-data -a pi >. Damit kann der user pi aber nur auf Files der Gruppe www-data zugreifen, soweit die Gruppe www-data (nicht der user www-data) dazu berechtigt ist. Du musst daher auch die Schreibrechte der Gruppe www-data aktivieren, damit das PHP-File -wohin auch immer - etwas ausgeben (schreiben) kann.
    Wenn - umgekehrt - der user www-data aus seiner www-Sandbox ausbrechen soll, und ein Script des users pi (der Gruppe pi) ausführen soll, kann der user www-data der gruppe pi beitreten und der user pi muss die Gruppenrechte für das Script auf rwx stellen.


    Daneben gibt es (aus historischen Gründen) aber auch noch die Sticky Bits, die die Dateirechte ergänzen können. Wird das Bit "run as" beim User, oder der Gruppe gesetzt, wird das File als File-Eigentümer, oder als Gruppe behanderlt. Mit < chmod g+s /DateiOderVerzeichnisName > wird z.B. das Run as Group Bit zu den bisherigen Gruppenrechten gesetzt. Sonst siehe < man chmod >


    Am einfachsten geht es aber mit ACL < man acl > indem einem File oder Verzeichnis ein weiterer user rwx-Rechte (oder weniger) erhält.
    Der user pi kann auf user-www-data Files rwx zugreifen, wenn z.B. mit < setfacl -m u:pi:rwx /www-data-owner-File > er neben dem user www-data rwx-Userrechte erhält. Umgekehrt kann der www-data user ein File des Users pi als Eigentümer rwx-en, wenn das File in /home/pi/bin/irgendein Srcipt mit < setfacl -m u:www-data:rwx /home/pi/bin/irgendeinScript >, zusätzlich als Eigentümer in die ACL eingetragen wird. Das ist nur eine Mini-Möglichkeit der ACL, die im EXT4 Filesystem per default bereits aktiviert sein sollten.



    Servus !

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM ().