Solució perquè PHP no tingui permís per executar l'ordre exec a Linux

Referències oficials relacionades

PHP exec Linux sudoers file Sudo Commands

Modificacions en executar-se en mode fastcgi

Quan PHP s’executa en mode fastcgi, els seus permisos s’hereten del seu programa amfitrió. Prenguem apache com a exemple per explicar-ho. Primer de tot, hem de trobar el compte sota el qual s’executa apache, després utilitzar vi o vim per editar el fitxer / etc / sudoers i afegir el següent exemple de referència al fitxer. Al contingut següent, primer utilitzeu l'ordre ps per trobar el procés apache httpd, mireu la informació del compte a la part més esquerra del resultat retornat i, a continuació, editeu el fitxer sudoers per afegir autorització al compte apache.

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

Modificacions en executar-se en mode php-fpm

Quan s’executa en mode php-fpm, s’executa com un procés independent. Per tant, primer trobem el seu compte en execució i, a continuació, realitzem les operacions d’autorització de la manera anterior.

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

Verifiqueu que els canvis entrin en vigor

Després de les operacions anteriors, hem modificat l'autorització, però encara no ha tingut efecte. Hem de reiniciar el servei per fer efectiva la nostra modificació. Segons la nostra situació real, reinicieu el servei apache o php-fpm. A continuació, executeu l'ordre exec per veure el resultat retornat. Si el resultat retornat s'obté normalment, és correcte.

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