Riešenie pre PHP, ktoré nemá povolenie na vykonávanie príkazu exec v systéme Linux
Súvisiace oficiálne referencie
PHP exec Linux sudoers file Sudo CommandsÚpravy pri behu v režime fastcgi
Keď je PHP spustené v režime fastcgi, jeho povolenia sa dedia z hostiteľského programu. Ako vysvetlenie si berieme apache. Najskôr musíme nájsť účet, pod ktorým je spustený apache, a potom pomocou nástroja vi alebo vim upraviť súbor / etc / sudoers a do súboru pridať nasledujúci referenčný príklad. V nasledujúcom obsahu najskôr pomocou príkazu ps vyhľadajte proces apache httpd, pozrite si informácie o účte na ľavej strane vráteného výsledku a potom upravte súbor sudoers, aby ste pridali autorizáciu k účtu apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Úpravy pri spustení v režime php-fpm
Keď beží v režime php-fpm, beží ako samostatný proces. Najprv teda nájdeme jeho bežiaci účet a potom vykonáme autorizačné operácie, ako je uvedené vyššie.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Overte, či sa zmeny prejavia
Po vyššie uvedených operáciách sme autorizáciu upravili, ale zatiaľ nenadobudla účinnosť. Aby sa táto zmena prejavila, je potrebné službu reštartovať. Podľa našej skutočnej situácie reštartujte službu apache alebo php-fpm. Potom vykonaním príkazu exec zobrazte vrátený výsledok. Ak sa vrátený výsledok získa normálne, je úspešný.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);