PHP und shell_exec

  • Moin,

    ich versuche via PHP div. Daten auszugeben.

    Mittels PHP -> "shell_exec()" starte ich verschiede Kommandos und möchte das Ergebnis im HTML sehen.
    Bei vielen Kommandos klappt dies problemlos, bei einigen erhalte ich keine Antwort.
    Hier ein kleines Beispiel:

    PHP
    1.
    <?php
    echo shell_exec("vcgencmd measure_temp");
    ?>
    <br><br>
    2.
    <?php
    echo shell_exec("uptime --since");
    ?>

    Mit dem Browser sehe ich dann:

    1.

    2. 2022-02-06 15:22:20

    D.h. das "vcgencmd" liefert keine Rückgabe, das "uptime" dagegen schon.


    in einer Shell erhalte ich dagegen vom "vcgencmd measure_temp"

    "temp=37.0'C"


    Hab keine Idee mehr, was ich da falsch mache.

    Irgendwelche Ideen, w ich weiter suchen kann?

  • vcgencmd benötigt ein bestimmte Gruppenmitgliedscgaft des Users, der diesen Befehl ausführt. Der User www-data (der Webserver) ist nicht in dieser Gruppe und deshalb bekommst Du auch keine Ausgabe. In diesem Fall würde ich nicht experimentieren, sondern


    Code
    cat /sys/class/thermal/thermal_zone0/temp

    abrufen und selber umrechnen.

  • Es wird nichts ausgegeben, da vcgencmd mit dem User www-data keine Zugriffsberechtigung hat.

    Man kann das aufweichen:

    Code
    sudo usermod -aG video www-data

    Der Befehl uptime benötigt hingegen keine speziellen Zugriffsberechtigungen. Deswegen funktioiert der auch.

    Beim Testen findet man solche Fehler heraus, wenn man die Fehlerausgabe beim Testen beobachtet:


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

    Der Aufruf verursacht dann folgende Fehlermeldung:

    Quote

    VCHI initialization failed



    Wenn man im Internet danach sucht, findet man das hier: https://chewett.co.uk/blog/258…ailed-raspberry-pi-fixed/


    EDIT: Hyle war schneller. Es ist noch anzumerken, dass man durch die Berechtigung die Sicherheit verschlechtert.

  • Vielen Dank für die schnellen Antworten.


    Ich hab ja schon beinahe vermutet, dass Rechte das Problem sein werden,

    mir war nur bis grad nicht kar, dass es Befehle gibt mit unterschiedichen Rechten.


    Gibt es da eine Möglichkeit, diese erforderlichen Gruppenmitgliedschaften abzurufen?

    Ich möchte ja noch weitere Daten mit weiteren Kommandos abfragen.

  • Genau aus dem Grund hatte ich in dem Fall die Gruppe nicht genannt.


    Er wäre sowieso irgendwann drauf gekommen.

    Dann ist es besser diese Lösung gleich mit anzubieten und drauf hinzuweisen, dass es unsicher ist.


    Zum Glück sind nicht alle RPis aus dem Internet erreichbar. Sonst gäbe es schon lange ein RPi-Bot-Netzwerk.

    Es gibt ja z.B. Bots, die versuchen eine SSH-Verbindung mit pi als User und raspberry als Passwort aufzubauen.

    Das ist praktisch, wenn die ganzen Nutzer das Passwort nicht ändern und der User pi auch root-Rechte bekommen kann.

  • Das ist praktisch, wenn die ganzen Nutzer das Passwort nicht ändern und der User pi auch root-Rechte bekommen kann.

    Deshalb hatte man sich irgendwann (ich glaube seit Stretch) entschlossen bei Rapbian den SSH-Server nicht mehr per default aktiv zu haben.


    Ich möchte ja noch weitere Daten mit weiteren Kommandos abfragen.

    Da kommt es immer auf die Befehle an, die man ausführen möchte.

  • Im error log findet sich tatsächlich die Meldung "VCHI initialization failed".


    Daraufhin hab ich wie ober vorgeschlagen dem "www-data" die Gruppe "video" zugeordnet. Leider ohne Erfolg.

    Hab auch dann auch mal die Gruppe "users" probiert, ebenfalls ohne Erfolg.

    Zur Beruhigung: Inzwischen hab ich die Gruppenberechtigung wieder zurückgesetzt..


    Es gibt ja z.B. Bots, die versuchen eine SSH-Verbindung mit pi als User und raspberry als Passwort aufzubauen.

    Das ist praktisch, wenn die ganzen Nutzer das Passwort nicht ändern und der User pi auch root-Rechte bekommen kann.

    Mein RPi ist aus dem Internet nicht erreichbar.

    Dennoch ist es bei der Installation eines neuen RPi meine erste Aktion, einen frischen Adminuser mit sicherem Passwort einzurichten und den User "pi" zu löschen.

    Daher traue ich mich auch ein paar unsaubere Aktionen mit Gruppenrechten, aber ich möchte ja gerne lernen, wie es besser geht.

  • Eine Möglichkeit wäre es, die Daten, die du aus dem PI auslesen willst, von einem anderen Prozess, der das darf, in einer "Datenbank" (das könnte auch eine einfache CSV/TXT-Datei sein) bereitzustellen, aus der dann der Webserver sie mittels PHP lesen kann.


    Damit kannst du deinen Großteil von Sicherheitsbedenken ausräumen und musst zum Beispiel dem 'www-data' nicht zusätzliche Rechte einräumen.

    Computer ..... grrrrrr

  • Quick and Dirty :

    PHP ändern:


    PHP
    <?php
    echo shell_exec("sudo vcgencmd measure_temp");
    ?>


    Dann im Terminal : sudo visudo


    Unten einfügen :


    Code
    pi ALL= (root) NOPASSWD: /usr/bin/vcgencmd


    fertig.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • pi darf ja sowieso schon, es geht um www-data :)

    Ja, sorry. C&P fehler vom Test-Pi :)

    Code
    www-data ALL= (root) NOPASSWD: /usr/bin/vcgencmd

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • NEIN!! :motz:


    Das macht man nicht mal aus Spaß!


    P.s. Der meckernde Emoji ist echt witzig. :D

    Nicht ?
    Also ist es besser www-data in eine Gruppe aufzunehmen so das er dort alles aus dieser Gruppe darf statt einen einzigen Befehl mittels sudo ?
    Hier gab es vor Urzeiten mal einen Thread zu genau diesem Thema von meigrafd. Er hatte ein "sudowebscript" gepostet. Da gab es auch schon unzählige Diskussionen zum für und wieder.
    Ist eine Lösung wie sudo usermod -aG video www-data nur ohne die zusätzlichen Rechte welche die Gruppe Video hat.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.