Dem Apache-Benutzer www-data
müssen Berechtigungen erteilt werden, um bestimmte Anwendungen mit auszuführen sudo
.
- Führen Sie den Befehl aus
sudo visudo
. Eigentlich wollen wir die Datei in bearbeiten. etc/sudoers
Um dies zu tun, verwenden Sie sudo visudo
in Terminal, es duplizieren (temporäre) sudoers
Datei zu bearbeiten.
- Fügen Sie am Ende der Datei Folgendes hinzu: -wenn Sie den Befehl zum
restart
Rauchen und den php
Befehl für eine andere Aktion in Ihrer Frage verwenden möchten ,
www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php
(Dies setzt voraus, dass Sie ausführen restart
und php
Befehle mit Superuser-Rechten (root) ausführen möchten. Und Sie verwenden den php
Befehl im usr/bin/
Pfad.)
Wenn Sie jedoch jede Anwendung mit Superuser-Rechten ausführen möchten, fügen Sie Folgendes anstelle der oben genannten hinzu. Möglicherweise möchten Sie dies nicht tun, nicht für ALL
Befehle, die sehr gefährlich sind.
www-data ALL=NOPASSWD: ALL
3. Nachdem Sie die sudoers-Datei bearbeitet haben (indem Sie die temporäre Datei visudo
bearbeiten) sudoers
, speichern Sie sie und beenden Sie die temporäre Datei (visudo), um sie in die sudoers
Datei zu schreiben . ( wq!
)
4.Das ist es, benutze jetzt exec()
oder shell_exec
auf die folgende Art und Weise in deinem xxx.php
Skript. Denken Sie daran, sudo
den Befehl vor der Verwendung im PHP-Skript zu verwenden.
Ex:-
exec ("sudo /etc/init.d/smokeping restart 2>&1");
oder
shell_exec("sudo php -v");
Fügen Sie also in Ihrem Problem die Befehle hinzu, die Sie beim Hinzufügen verwenden möchten, step no (2.)
und ändern Sie Ihr PHP-Skript nach Ihren Wünschen .
Hier ist das gleiche Problem wie bei Ihnen /programming//a/22953339/1862107
Thusitha Sumanadasa
quelle
Versuchen Sie, den gesamten Pfad zur PHP-Binärdatei anzugeben.
/usr/bin/php
Wenn Sie es nicht kennen, suchen Sie es mit:
which php
quelle
/var/log/httpd/error*
.Sie wollen in der Regel vollständige Pfade zu Anwendungen wie spezifizieren
whoami
,ls
undphp
. Wenn Sie sich nicht sicher sind, wo sich ein Programm befindet (vollständiger Pfad), können Sie Folgendes herausfinden:Dann geben Sie es so in Ihrem Skript an.
quelle
echo shell_exec("/usr/bin/php somefile.php 2>&1")
?hu
. So müssen Sie sicherstellen , dass das Skriptphp
zu laufen versucht , wird wie folgt festgelegt:chmod 755 somescript.php
. Auf diese Weise kann der Benutzer, unter dem Apache ausgeführt wird, Ihre.php
Datei ausführen und lesen .Beschränkt Ihre php.ini den verfügbaren Befehlssatz?
Das ist von meinem
/etc/php5/php.ini
quelle
So debuggen Sie Probleme mit shell_exec
OK, hier haben wir ein Problem: Einige Dinge funktionieren im Terminal und nicht in PHP's Shell_Exec (oder exec, spawn, was auch immer). Lassen Sie uns überlegen: Was ist der Unterschied zwischen Ihnen und PHP? Hier sind drei:
PHP wird von HTTP-Server-Regeln ausgeführt
In der Tat läuft Ihr Terminal vom
yourname
Benutzer und PHP wird von ausgeführtwww-data
. Die erste Idee ist also, das Terminal vomwww-data
Benutzer aus zu öffnen und den gleichen Befehl auszuführen. So..../etc/passwd
Datei, suchen Sie die Zeile mit demwww-data
Benutzer und ändern Sie die Login-Shell (letzte) von/bin/false
(oder was auch immer) in/bin/bash
.www-data
's Terminal:su www-data
/etc/passwd
Datei wiederherzustellen, wenn Sie fertig sindPHP wird von PHP ausgeführt .
PHP ist paranoid und es gibt viele Optionen in der Konfiguration von Apache / Nginx und php.ini, die Ihren Versuch unterbrechen können.
Das Debuggen ist etwas komplizierter. Hier gibt es zwei Möglichkeiten:
Aktivieren Sie die Protokolle im Browser und sehen Sie das Problem. Bearbeiten Sie Ihre
php.ini
, aktivieren Siedisplay_errors
und alle anderen Flags, um Fehler im Browser anzuzeigen. Sie können sie lesen und debuggen.Besorgen Sie sich
www-data
die Shell (siehe ersten Abschnitt) und führen Sie so etwas ausecho '<?php shell_exec("php -v"); ?>' | php
Dies führt denselben PHP-Code in der Konsole aus und Sie können Fehler und Fehlerbehebungen sehen.
PHP wird von SELinux / apparmor ausgeführt
Selinux und Apparmor sind Sicherheitselemente, die es Anwendungen verbieten, bestimmte Aktionen auszuführen (z. B. das Starten anderer Anwendungen oder bestimmter anderer Anwendungen). Möglicherweise ist es auf Ihrem Server aktiviert.
Zum Überprüfen - deaktivieren Sie selinux / apparmor und prüfen Sie, ob ein Problem vorliegt.
Zum Korrigieren - lesen Sie das entsprechende Handbuch und korrigieren Sie die zulässigen Schreibregeln für Ihren Fall.
quelle
Für mich war der einfachste Weg, in die php.ini zu gehen und die Zeile zu kommentieren, die mit beginnt
quelle