Rješenje za PHP koji nema dozvolu za izvršavanje exec naredbe na Linuxu

Povezane službene reference

PHP exec Linux sudoers file Sudo Commands

Izmjene prilikom rada u fastcgi načinu

Kada se PHP izvodi u fastcgi načinu, njegova se dopuštenja nasljeđuju od glavnog programa. Za objašnjenje uzimamo apache. Prvo, moramo pronaći račun na kojem je pokrenut apache, a zatim upotrijebiti vi ili vim za uređivanje datoteke / etc / sudoers i datoteci dodati sljedeći referentni primjer. U sljedećem sadržaju prvo upotrijebite ps naredbu da biste pronašli postupak apache httpd, pogledali podatke o računu na lijevoj strani vraćenog rezultata, a zatim uredite datoteku sudoers kako biste dodali autorizaciju na račun apache.

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

Izmjene prilikom izvođenja u php-fpm načinu

Kada se izvodi u php-fpm načinu, izvodi se kao zaseban postupak. Dakle, prvo pronađemo njegov tekući račun, a zatim izvodimo postupke autorizacije kao gore.

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

Provjerite stupaju li promjene na snagu

Nakon gore navedenih operacija izmijenili smo autorizaciju, ali ona još nije stupila na snagu. Moramo ponovno pokrenuti uslugu kako bi naša izmjena stupila na snagu. Prema našoj stvarnoj situaciji, ponovo pokrenite uslugu apache ili php-fpm. Zatim izvršite naredbu exec za prikaz vraćenog rezultata. Ako se vraćeni rezultat dobije normalno, uspješan je.

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