Rješenje za PHP koji nema dozvolu za izvršavanje exec naredbe na Linuxu
Povezane službene reference
PHP exec Linux sudoers file Sudo CommandsIzmjene 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);