Løsning for PHP som ikke har tillatelse til å utføre exec-kommando på Linux

Beslektede offisielle referanser

PHP exec Linux sudoers file Sudo Commands

Endringer når du kjører i hurtigcgi-modus

Når PHP kjører i fastcgi-modus, arves tillatelsene fra vertsprogrammet. La oss ta apache som et eksempel for å forklare. Først må vi finne kontoen som apache kjører under, og deretter bruke vi eller vim til å redigere / etc / sudoers-filen, og legge til følgende referanseeksempel i filen. I følgende innhold, bruk først kommandoen ps for å finne apache-prosessen httpd, se på kontoinformasjonen til venstre for det returnerte resultatet, og rediger deretter sudoers-filen for å legge til autorisasjon til apache-kontoen.

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

Endringer når du kjører i php-fpm-modus

Når du kjører i php-fpm-modus, kjører den som en egen prosess. Så vi finner først den løpende kontoen, og utfører deretter autorisasjonsoperasjoner som ovenfor.

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

Bekreft at endringene trer i kraft

Etter ovennevnte operasjoner har vi endret autorisasjonen, men den har ennå ikke trådt i kraft. Vi må starte tjenesten på nytt for å få endringen til å tre i kraft. I henhold til vår faktiske situasjon, start apache- eller php-fpm-tjenesten på nytt. Utfør deretter exec-kommandoen for å se det returnerte resultatet. Hvis det returnerte resultatet oppnås normalt, er det vellykket.

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