Webinterface führt Php-Datei mit shell_exec('..') nicht aus.

  • Hallo zusammen,

    ich bin dabei ein Webinterface zu erstellen, mit dem ich meine Musikanlage steuern kann.

    Nun habe ich folgendes Problem:

    Die Php-Datei führt beim aufrufen im Web (raspberrypi/anlagean.php) nicht das shell_exec Script aus, mir wird nur die Echo Ausgabe angezeigt.

    Wenn ich die Php-Datei ganz normal über die Shell ausführe funktioniert es. Also gehe ich eher nicht von einem Fehler in meinem Scripten aus.

    Wenn ich die Datei index.php im Webinterface aufrufe würd mir auch ganz normal meine aktuelle Php Version angezeigt. Weshalb Php7 auch richtig mit Apache2 verknüpft sein muss.


    Hier der Code meiner Php-Datei:

    Liegt im Verzeichnis /var/www/html/anlagean.php


    #!/usr/bin/php

    <?php

    shell_exec('/home/pi/muan.sh');

    echo("Anlage an");

    ?>


    Bash-Datei:

    Liegt im Verzeichnis: /home/pi/muan.sh


    #!/bin/bash

    sudo /usr/bin/irsend SEND_ONCE musikanlage KEY_POWER

    sleep 5



    Ich hoffe ihr könnt mir weiterhelfen.

    Schonmal vielen Dank im Voraus!

  • Es ist eher ein Rechteproblem, das Du mit

    ls -al /var/www/html/anlagean.php

    ls -al /home/pi/muan.sh

    erkennen kannst und mit chmod 777 nicht beseitigt werden kann.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Ich habe die muan.sh jetzt auch nach /var/www/html verschoben.

    Zudem hat jetzt jeder die Zugriffsrechte.

    Ist das Problem, dass root der Benutzer von muan.sh ist?


    pi@raspberrypi:/var/www/html $ ls -al muan.sh

    -rwxrwxrwx 1 root www-data 75 Feb 16 15:06 muan.sh

    pi@raspberrypi:/var/www/html $ ls -al anlagean.php

    -rwxrwxrwx 1 pi www-data 81 Feb 16 15:07 anlagean.php

    Edited once, last by lanfix ().

    • Official Post

    Hallo,


    Hab nur kurz überflogen...


    Das Script wird auch nicht funktionieren wenn der Besitzer www-data ist, denn

    #!/bin/bash

    sudo /usr/bin/irsend SEND_ONCE musikanlage KEY_POWER

    sleep 5

    darf www-data nicht ausfüren und das ist auch gut so.



    //Nachtrag
    Nur um das nochmals hervorzuheben:

    und mit chmod 777 nicht beseitigt werden kann

    ;)

  • Es funktioniert jetzt!

    Ich habe den Benutzer und die Gruppe auf root gestellt, das sudo entfernt und schon hat es geklappt.

    Vielen Dank!:bravo2:

  • -rwxrwxrwx ist Dein Problem. chmod 777 ist kein Problemlöser, sondern ein -Verschleierer.


    Abgesehen davon, dass muan.sh jetzt dem User root gehört (weil der User pi kein Schreibrecht hatte), muss der Eigentümer des Hauptprozesses auch berechtigt sein, auf die Ausgabedevices des Subprozesses schreibend zuzugreifen, was üblicherweose über die Gruppenverwaltung geregelt wird.

    Wenn der User pi schon Mitglied aller Gruppen ist, die "sein" Script zur Aisgabe benötigt, dann kannst Du dem User www-data (dem ja alle Dateien von /var/www/ -abwärts gehören sollten) erlauben, die Rechte des User pi an einem File (oder einem ganzen Verzeichnis) anzunehmen, sodass ein Script von www-data aisgeführt werden kann, alsob der User pi dies ausführt. Dies geschieht über einen Eintrag in die Access Control List des Files z.B. mit < setfacl -m u:www-data:rwx /home/pi/muan.sh> (wenn das File wieder dem User pi gehört).



    Servus !

    RTFM = Read The Factory Manual, oder so