Ř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);