Lösung für PHP, das keine Berechtigung zum Ausführen des Befehls exec unter Linux hat

Verwandte offizielle Referenzen

PHP exec Linux sudoers file Sudo Commands

Änderungen im Fastcgi-Modus

Wenn PHP im Fastcgi-Modus ausgeführt wird, werden seine Berechtigungen von seinem Host-Programm geerbt. Wir nehmen Apache als Beispiel, um es zu erklären. Zuerst müssen wir das Konto finden, unter dem Apache ausgeführt wird, und dann vi oder vim verwenden, um die Datei / etc / sudoers zu bearbeiten, und der Datei das folgende Referenzbeispiel hinzufügen. Verwenden Sie im folgenden Inhalt zuerst den Befehl ps, um den Apache-Prozess httpd zu finden, sehen Sie sich die Kontoinformationen ganz links im zurückgegebenen Ergebnis an und bearbeiten Sie dann die sudoers-Datei, um dem Apache-Konto eine Autorisierung hinzuzufügen.

            ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
        

Änderungen beim Ausführen im PHP-Fpm-Modus

Im php-fpm-Modus wird es als separater Prozess ausgeführt. Wir finden also zuerst das laufende Konto und führen dann die oben beschriebenen Autorisierungsvorgänge durch.

            ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
        

Stellen Sie sicher, dass die Änderungen wirksam werden

Nach dem obigen Vorgang haben wir die Autorisierung geändert, sie ist jedoch noch nicht wirksam. Wir müssen den Dienst neu starten, damit unsere Änderung wirksam wird. Starten Sie den Apache- oder PHP-Fpm-Dienst entsprechend unserer aktuellen Situation neu. Führen Sie dann den Befehl exec aus, um das zurückgegebene Ergebnis anzuzeigen. Wenn das zurückgegebene Ergebnis normal erhalten wird, ist es erfolgreich.

            exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);