Solution pour que PHP ne soit pas autorisé à exécuter la commande exec sous Linux

Références officielles connexes

PHP exec Linux sudoers file Sudo Commands

Modifications lors de l'exécution en mode fastcgi

Lorsque PHP fonctionne en mode fastcgi, ses permissions sont héritées de son programme hôte. Nous prenons apache comme exemple pour expliquer. Tout d'abord, nous devons trouver le compte sous lequel Apache est en cours d'exécution, puis utiliser vi ou vim pour modifier le fichier / etc / sudoers, et ajouter l'exemple de référence suivant au fichier. Dans le contenu suivant, utilisez d'abord la commande ps pour trouver le processus apache httpd, regardez les informations de compte sur le côté gauche du résultat renvoyé, puis modifiez le fichier sudoers pour ajouter une autorisation au compte apache.

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

Méthode de modification lors de l'exécution en mode php-fpm

Lorsqu'il est exécuté en mode php-fpm, il s'exécute comme un processus distinct. Nous trouvons donc d'abord son compte courant, puis effectuons les opérations d'autorisation comme ci-dessus.

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

Vérifiez que les modifications prennent effet

Après les opérations ci-dessus, nous avons modifié l'autorisation, mais elle n'a pas encore pris effet. Nous devons redémarrer le service pour que notre modification prenne effet. Selon notre situation actuelle, redémarrez le service apache ou php-fpm. Exécutez ensuite la commande exec pour afficher le résultat renvoyé. Si le résultat renvoyé est obtenu normalement, il réussit.

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