Solución para que PHP non teña permiso para executar o comando exec en Linux

Referencias oficiais relacionadas

PHP exec Linux sudoers file Sudo Commands

Modificacións cando se executa en modo fastcgi

Cando PHP funciona en modo fastcgi, os seus permisos son herdados do seu programa host. Tomamos o apache como exemplo para explicar. Primeiro, necesitamos atopar a conta en que se está executando apache e despois usar vi ou vim para editar o ficheiro / etc / sudoers e engadir o seguinte exemplo de referencia ao ficheiro. No seguinte contido, primeiro use o comando ps para atopar o proceso apache httpd, mire a información da conta na parte máis esquerda do resultado devolto e, a continuación, edite o ficheiro sudoers para engadir autorización á conta apache.

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

Modificacións ao executarse en modo php-fpm

Cando se executa en modo php-fpm, execútase como un proceso separado. Primeiro atopamos a súa conta en execución e logo realizamos as operacións de autorización como antes.

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

Verifique que os cambios entren en vigor

Despois das operacións anteriores, modificamos a autorización, pero aínda non entrou en vigor. Necesitamos reiniciar o servizo para facer efectiva a nosa modificación. Segundo a nosa situación real, reinicie o servizo apache ou php-fpm. A continuación, execute o comando exec para ver o resultado devolto. Se o resultado devolto se obtén normalmente, é correcto.

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