Soluție pentru PHP neavând permisiunea de a executa comanda exec pe Linux
Referințe oficiale conexe
PHP exec Linux sudoers file Sudo CommandsModificări la rularea în modul fastcgi
Când PHP rulează în modul fastcgi, permisiunile sale sunt moștenite de la programul său gazdă. Luăm apache ca exemplu pentru a explica. Mai întâi, trebuie să găsim contul sub care rulează apache și apoi să folosim vi sau vim pentru a edita fișierul / etc / sudoers și să adăugăm următorul exemplu de referință în fișier. În conținutul următor, utilizați mai întâi comanda ps pentru a găsi procesul apache httpd, uitați-vă la informațiile contului din partea din stânga a rezultatului returnat, apoi modificați fișierul sudoers pentru a adăuga autorizație la contul apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Modificări la rularea în modul php-fpm
Când rulați în modul php-fpm, acesta rulează ca un proces separat. Deci, mai întâi găsim contul său de execuție și apoi efectuăm operațiuni de autorizare ca mai sus.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Verificați dacă modificările au efect
După operațiunile de mai sus, am modificat autorizația, dar aceasta nu a intrat încă în vigoare. Trebuie să repornim serviciul pentru ca modificarea noastră să aibă efect. Conform situației noastre actuale, reporniți serviciul apache sau php-fpm. Apoi executați comanda exec pentru a vizualiza rezultatul returnat. Dacă rezultatul returnat este obținut în mod normal, acesta are succes.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);