Решение за PHP, който няма разрешение за изпълнение на exec команда на Linux

Свързани официални справки

PHP exec Linux sudoers file Sudo Commands

Модификации при работа в режим fastcgi

Когато PHP работи в режим fastcgi, неговите разрешения се наследяват от хост програмата. Вземаме apache като пример за обяснение. Първо трябва да намерим акаунта, под който работи apache, и след това да използваме vi или vim, за да редактираме файла / etc / sudoers и да добавим следния референтен пример към файла. В следващото съдържание първо използвайте командата ps, за да намерите процеса на apache httpd, погледнете информацията за акаунта в най-лявата страна на върнатия резултат и след това редактирайте файла sudoers, за да добавите оторизация към акаунта на apache.

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

Модификации при работа в режим php-fpm

Когато се изпълнява в режим php-fpm, той се изпълнява като отделен процес. Така че първо намираме текущия му акаунт и след това извършваме оторизационни операции, както по-горе.

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

Проверете дали промените влизат в сила

След горните операции сме модифицирали упълномощаването, но то все още не е влязло в сила. Трябва да рестартираме услугата, за да влезе в сила нашата модификация. Според реалната ни ситуация рестартирайте услугата apache или php-fpm. След това изпълнете командата exec, за да видите върнатия резултат. Ако върнатият резултат се получи нормално, той е успешен.

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