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);