Ratkaisu PHP: lle, jolla ei ole lupaa suorittaa exec-komentoa Linuxissa
Aiheeseen liittyvät viralliset viitteet
PHP exec Linux sudoers file Sudo CommandsMuutokset suoritettaessa fastcgi-tilassa
Kun PHP toimii fastcgi-tilassa, sen oikeudet peritään isäntäohjelmastaan. Otamme apache esimerkin selittää. Ensinnäkin meidän on löydettävä tili, jolla apache on käynnissä, ja muokkaa sitten vi tai vim / / etc / sudoers-tiedostoa ja lisää seuraava viite-esimerkki tiedostoon. Seuraavassa sisällössä etsi ensin apache-prosessi httpd ps-komennolla, tarkastele palautetun tuloksen vasemmassa reunassa olevia tilitietoja ja muokkaa sudoers-tiedostoa lisätäksesi valtuutuksen apache-tiliin.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Muutokset suoritettaessa php-fpm-tilassa
Kun suoritetaan php-fpm-tilassa, se toimii erillisenä prosessina. Joten löydämme ensin sen juoksevan tilin ja suoritamme sitten valtuutustoiminnot kuten yllä.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Varmista, että muutokset tulevat voimaan
Edellä mainittujen toimintojen jälkeen olemme muuttaneet valtuutusta, mutta se ei ole vielä tullut voimaan. Meidän on käynnistettävä palvelu uudelleen, jotta muutoksemme tulevat voimaan. Käynnistä apache tai php-fpm -palvelu uudelleen todellisen tilanteen mukaan. Suorita sitten exec-komento nähdäksesi palautetun tuloksen. Jos palautettu tulos saadaan normaalisti, se onnistuu.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);