Рішення для 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);