Führen Sie das Python-Skript von Php aus

Lesezeit: 3 Minuten

Ich habe eine PHP-Webseite auf meinem Himbeer-Pi mit 2 Schaltflächen (ein und aus). Die Schaltfläche “Ein” leitet zu On.php weiter. Die Schaltfläche “Aus” leitet zu Off.php weiter. In “/usr/lib/cgi-bin” habe ich ein Python-Skript die ich ausführen möchte (script.py), kann ich perfekt vom Terminal aus ausführen, indem ich sie eintippe

cd /usr/lib/cgi-bin
sudo python script.py

Es funktioniert, wenn ich es vom Terminal aus mache.

Das Problem ist die PHP-Datei (On.php) in meinem “/var/www”-Ordner. Das habe ich geschrieben:

<?php
exec('cd /usr/lib/cgi-bin');
exec('sudo python script.py');
?>

Warum wird das Skript vom Terminal ausgeführt, aber nicht von meinem PHP?

  • Hat Ihr Superuser ein Passwort?

    – G_hi3

    4. August 15 um 14:01 Uhr

Sie können sudo nicht von einem PHP-Skript aus verwenden. Apache wird von einem Benutzer ausgeführt (www-data im Allgemeinen), also bearbeiten Sie diese Datei: /etc/sudoers

Fügen Sie dann diese Zeile hinzu:

www-data ALL=(ALL) NOPASSWD:ALL

Pflege ! Dadurch werden alle Funktionen autorisiert, von einem PHP-Skript aufgerufen zu werden. Sie können das Ändern von “ALL” durch Ihr Skript oder Ihren Python-Befehl anpassen.

Präzisieren Sie dann Ihren Benutzer in Ihrem exec-Befehl:

<?php
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py')

  • Entfernt dies Passwörter? Weil ich den Serverport öffentlich weitergeleitet habe. Ich möchte nicht, dass jemand einfach meinen Server betritt.

    – Mollige Schokolade

    4. August 15 um 14:33 Uhr


  • Es wird das Passwort des Benutzers www-data entfernen, deshalb können Sie NOPASSWD nach einem Befehl fragen, wie z NOPASSWD:python. Es wird nichts für andere Benutzer ändern.

    – Vinzenz Decaux

    4. August 15 um 14:57 Uhr

  • Ok, ich bin kein Experte, ich wollte nur sicherstellen, dass sich niemand als Superuser oder irgendein anderer Benutzer in meine Himbeere hacken kann.

    – Mollige Schokolade

    4. August 15 um 15:01 Uhr

  • Dies erlaubt die Verwendung von sudo ohne Passwort, nur der Benutzer www-data. Dieser Benutzer kann keine Verbindung über SSH herstellen, also kein Risiko.

    – Vinzenz Decaux

    4. August 15 um 15:15 Uhr


  • sudo www-data ohne Passwort ist überhaupt nicht sicher. Es geht nicht um SSH, es geht um Nginx, Apache2 oder etc.. Wenn einer der Server ausgenutzt wurde, kann er Remote-Befehle ausführen. Wenn ja root Privileg, manche glücklich, manche traurig. Es passiert immer.

    – Punktestrich

    25. April 16 um 23:30 Uhr


Fuhren Sie das Python Skript von Php aus
Alberto Pagani

Probieren Sie es aus, es sollte funktionieren:

<?php 
system("cd /usr/lib/cgi-bin");
system("sudo python script.py");
?>

Oder sogar das:

<?php 
system("cd /usr/lib/cgi-bin && sudo python script.py");
?>

Fuhren Sie das Python Skript von Php aus
Code1

Auf einer älteren Raspbian-Distribution müssen Sie Ihre Datei einfügen /var/www/file.py. Also fügst du in deiner file.php hinzu:

{
    exec("sudo python /var/www/file.py");
}

Auf einem neueren Raspbian Jessie müssen Sie Ihre Datei dort ablegen /var/www/html/file.py, also müssen Sie in Ihrer file.php Folgendes hinzufügen:

{
    exec("sudo python /var/www/html/file.py");
}

Oder einfach eine Datei.py

<?php
{
  exec("sudo python test.py");
}

?>

Hinweis: Damit dies funktioniert, müssen Sie zuerst eine Datei bearbeiten, um diese Zeilen hinzuzufügen, um passwortloses sudo zu ermöglichen

sudo nano /etc/sudoers

Gehen Sie dann nach unten und fügen Sie dies hinzu

pi ALL=(ALL) NOPASSWD: ALL<br>
www-data ALL=(ALL) NOPASSWD: ALL

  • Fügen Sie niemals www-Daten zu Sudoern mit hinzu NOPASSWD: ALL! Dies kann zu einem sehr großen Sicherheitsproblem werden. Siehe den Kommentar von @dotslash oben

    – Dartmouth

    18. Dezember 16 um 17:31 Uhr

  • Ja, kann, wenn es online ist, ist dieses Pi nur eine Hausfernbedienung, das ist alles. Für die Leute, die das lesen, tun Sie dies nicht, um das Internet zu kontrollieren

    – Code1

    13. Januar 17 um 15:37 Uhr


  • So? Wenn es mit einem Netzwerk verbunden ist, kann es kompromittiert werden, wenn sich jemand nur genug Mühe gibt. Tu es einfach nicht. Es gibt bessere Wege, wie die Antwort von Alberto Pagani.

    – Dartmouth

    13. Januar 17 um 16:38 Uhr


.

522270cookie-checkFühren Sie das Python-Skript von Php aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy