Oplossing voor PHP die geen toestemming heeft om de exec-opdracht op Linux uit te voeren

Gerelateerde officiële referenties

PHP exec Linux sudoers file Sudo Commands

Wijzigingen tijdens het draaien in fastcgi-modus

Als PHP in fastcgi-modus draait, worden de permissies overgenomen van het hostprogramma. We nemen apache als voorbeeld om uit te leggen. Eerst moeten we het account vinden waaronder apache draait, en dan vi of vim gebruiken om het bestand / etc / sudoers te bewerken, en het volgende referentievoorbeeld aan het bestand toevoegen. Gebruik in de volgende inhoud eerst de opdracht ps om het apache-proces httpd te vinden, bekijk de accountinformatie aan de linkerkant van het geretourneerde resultaat en bewerk vervolgens het sudoers-bestand om autorisatie toe te voegen aan het apache-account.

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

Wijzigingen tijdens het draaien in php-fpm-modus

Wanneer het in php-fpm-modus wordt uitgevoerd, wordt het als een afzonderlijk proces uitgevoerd. We zoeken dus eerst het lopende account en voeren vervolgens autorisatiebewerkingen uit zoals hierboven.

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

Controleer of de wijzigingen van kracht worden

Na de bovenstaande bewerkingen hebben we de autorisatie gewijzigd, maar deze is nog niet van kracht geworden. We moeten de service opnieuw starten om onze wijziging van kracht te laten worden. Start de apache- of php-fpm-service opnieuw, afhankelijk van onze werkelijke situatie. Voer vervolgens de opdracht exec uit om het geretourneerde resultaat te bekijken.Als het geretourneerde resultaat normaal wordt verkregen, is het succesvol.

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