Server Rechte Problem

  • Hallo,

    ich möchte mit PHP eine Pythondatei ausführen und die Konsolenausgabe als Variable speichern und ausgeben.

    So sieht die PHP Datei aus:

    PHP
    <?php 
    
    
    $cmd = escapeshellcmd("python /var/www/html/combined.py");
    $out = shell_exec($cmd);
    
    
    echo $out;

    So sieht die Python Datei aus:

    Und das ist die Fehlermeldung von Apache:

    Code
    Traceback (most recent call last):
      File "/var/www/html/combined.py", line 9, in <module>
        ltr559 = LTR559()
      File "/usr/local/lib/python2.7/dist-packages/ltr559-0.1.1-py2.7.egg/ltr559/__init__.py", line 212, in __init__
        BitField('ALS', 0x0F)
      File "/usr/local/lib/python2.7/dist-packages/i2cdevice-0.0.7-py2.7.egg/i2cdevice/__init__.py", line 166, in __init__
        self._i2c = smbus.SMBus(1)
    IOError: [Errno 13] Permission denied

    Die Pythondatei funktioniert einwandfrei und kann sowohl normal (über python combined.py) gestartet werden, als auch über die PHP CLI (php -a).

  • Leider nicht. :(

    Code
    Traceback (most recent call last):
      File "/var/www/html/combined.py", line 9, in <module>
        ltr559 = LTR559()
      File "/usr/local/lib/python2.7/dist-packages/ltr559-0.1.1-py2.7.egg/ltr559/__init__.py", line 212, in __init__
        BitField('ALS', 0x0F)
      File "/usr/local/lib/python2.7/dist-packages/i2cdevice-0.0.7-py2.7.egg/i2cdevice/__init__.py", line 166, in __init__
        self._i2c = smbus.SMBus(1)
    IOError: [Errno 13] Permission denied

    Habe auch den Webserver neu gestartet.

    Einmal editiert, zuletzt von raspbian100 (17. April 2021 um 16:00)

    • Offizieller Beitrag

    Ich vermute das Board verwendet i2c oder? Dann schieb mal www-data auch noch in die Gruppe i2c.

    //Edit:

    Darum geht es https://shop.pimoroni.com/products/ltr-5…sensor-breakout oder?

    Den Link https://wiki.ubuntuusers.de/Benutzer_und_G…ppe-hinzufuegen wollte ich auch noch unterbringen.

  • Hallo raspbian100,

    wenn du python3 verwenden möchtest, musst du auch "python3" in der PHP Datei in Zeile 4 verwenden, da "python" die Version 2.7 benutzt.

    Du kannst python -V im Terminal ausführen und zum Vergleich python3 -V, dann wird der Unterschied deutlich.

  • Hallo raspbian100,

    wenn du python3 verwenden möchtest, musst du auch "python3" in der PHP Datei in Zeile 4 verwenden, da "python" die Version 2.7 benutzt.

    Du kannst python -V im Terminal ausführen und zum Vergleich python3 -V, dann wird der Unterschied deutlich.

    Python3 habe ich bereits in der index.php abgeändert, also Python3 wird verwendet :) Aber der letzte Fehler besteht immer noch.

    EDIT: Habe das Problem behoben, indem ich www-data zu der sudoers Gruppe hinzugefügt habe und in der index.php folgendes geändert:

    Code
    $cmd = escapeshellcmd("sudo python3 /var/www/html/combined.py");

    Einmal editiert, zuletzt von raspbian100 (17. April 2021 um 19:18)

  • raspbian100: Anmerkungen zum Quelltext: `ST7735` wird importiert, aber nicht verwendet.

    Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Besonders unübersichtlich wird es wenn man im Hauptprogramm auf Modulebene Funktionsdefinitionen versteckt.

    Auf den Kommentar ``# Create a values dict to store the data`` folgen erst einmal zwei Listen bevor das eigentlich kommentierte Wörterbuch definiert wird. Aber alle drei Werte `variables`, `units`, und `values` werden nirgends verwendet.

    Der Kommentar zu `factor` ist falsch eingerückt und das würde sich besser als Konstante machen.

    `mode` ist verwirrend und sinnfrei. Es ”startet” mit dem magischen Wert 10, laut kommentar der Startmodus, aber wird niemals irgendwo geändert. Es wird auch nur an einer Stelle in einem ``if`` verwendet und dort mit einer literalen 10 verglichen, also ist das eigentlich ein ``if True:``, was sinnfrei ist, weil der Block dann ja *immer* ausgeführt wird. Laut Kommentar ist das ``if`` eine Hauptschleife. Nö.

    Dann passieren wirre Sachen mit der CPU-Temperatur. Die wird gemessen, das Ergebnis fünf mal in einer Liste gehalten, dann wird die erste Kopie von den Werten weggelassen und eine weitere Temperaturmessung angehängt. Also gibt es im Grunde zwei Messungen, eine die viermal in der Liste steht und eine die nur einmal dort steht. Und daraus wird dann der Mittelwert gebildet. Also letztlich ist das erste Messung mal vier + zweite Messung durch 5. So wirklich sinnvoll ist das nicht, aber das lässt sich zumindest mal einfacher ausdrücken als das Listengehampel.

    Das zusammenstückeln von Zeichenketten und Werten mittels ``+`` und `str()` ist eher BASIC als Python. Dafür gibt es die `format()`-Methode auf Zeichenketten und f-Zeichenkettenliterale.

    Das `None` was an `pms_data` gebunden wird, wird nirgends verwendet.

    Bei der Ausgabe der Partikeldaten wird der Wert direkt an die Partikelgrösse geklatscht, ohne ein Leerzeichen dazwischen, oder wie bei den anderen Ausgaben ein Doppelpunkt und ein Leerzeichen.

    Zwischenstand (ungetestet):

    “Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”

  • Zum Glück ist das kein Server im Internet. In anderen Foren würde man jetzt freundlich nach der IP des Webservers fragen, um die IP auf die eigene Blacklist packen zu können.

    Solange der Dienst nicht im Internet erreichbar ist, ist die Gefahr gering.

    Das Problem, was ich sehe, dass du jetzt gelernt hast, wie man es so unsicher wie möglich gestalten kann.

    Der Tipp mit dialout kam nicht ohne Grund. Ein User darf/sollte nur die Rechte haben, die notwendig sind, damit der User arbeiten kann.

    Wenn man dem User einfach in die sudoers packt, darf der User zu viel. Gerade in Verbindung mit Webservern und Webanwendungen ist das ein großes Problem.

Jetzt mitmachen!

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