Řešení pro PHP, které nemá oprávnění k provádění příkazu exec v systému Linux
Související oficiální reference
PHP exec Linux sudoers file Sudo CommandsÚpravy při spuštění v režimu fastcgi
Když je PHP spuštěno v režimu fastcgi, jsou jeho oprávnění zděděna od hostitelského programu. Bereme apache jako příklad k vysvětlení. Nejprve musíme najít účet, pod kterým běží apache, a poté pomocí vi nebo vim upravit soubor / etc / sudoers a přidat do něj následující referenční příklad. V následujícím obsahu nejprve pomocí příkazu ps vyhledejte proces apache httpd, podívejte se na informace o účtu na levé straně vráceného výsledku a poté upravte soubor sudoers a přidejte autorizaci k účtu apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Metoda úpravy při spuštění v režimu php-fpm
Když běží v režimu php-fpm, běží jako samostatný proces. Nejprve tedy najdeme jeho běžící účet a poté provedeme autorizační operace, jak je uvedeno výše.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Ověřte, zda se změny projeví
Po výše uvedených operacích jsme oprávnění upravili, ale dosud se neprojevilo. Aby se naše změna projevila, je třeba službu restartovat. Podle naší skutečné situace restartujte službu apache nebo php-fpm. Poté spusťte příkaz exec a zobrazte vrácený výsledek. Pokud je vrácený výsledek získán normálně, je úspěšný.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);