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 pokretanja u fastcgi načinu

Kada se PHP izvodi u fastcgi načinu, njegove dozvole se nasljeđuju od glavnog programa. Uzmimo apache kao primjer za objašnjenje. Prvo, moramo pronaći račun na kojem je pokrenut apache, a zatim pomoću vi ili vim urediti datoteku / etc / sudoers i dodati sljedeći referentni primjer u datoteku. U sljedećem sadržaju, prvo upotrijebite ps naredbu za pronalaženje apache procesa httpd, pogledajte informacije o računu na krajnjoj lijevoj strani vraćenog rezultata, a zatim uredite datoteku sudoers da biste dodali autorizaciju na račun apache.

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

Izmjene prilikom pokretanja u php-fpm načinu

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

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

Provjerite da li promjene stupaju 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);