Ratkaisu PHP: lle, jolla ei ole lupaa suorittaa exec-komentoa Linuxissa

Aiheeseen liittyvät viralliset viitteet

PHP exec Linux sudoers file Sudo Commands

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