Exécuter des scripts Shell avec des privilèges élevés en PHP
Pour exécuter un script bash qui nécessite des privilèges élevés (via SUDO) depuis PHP à l'aide de shell_exec , il existe deux approches principales :
Option 1 : Désactiver le mot de passe Invite
Cette méthode implique de modifier le fichier sudoers (/etc/sudoers) en ajoutant une règle qui permet à l'utilisateur du serveur Web (par exemple, www-data) d'exécuter la commande spécifiée sans invite de mot de passe. Ouvrez le fichier sudoers à l'aide de la commande visudo et ajoutez une ligne similaire à la suivante :
www-data ALL=NOPASSWD: /path/to/script
Cela permettra à l'utilisateur du serveur Web d'exécuter le script sans être invité à saisir un mot de passe.
Option 2 : Utiliser proc_open de PHP
Une approche alternative consiste à utiliser la fonction proc_open en PHP. Cette fonction vous permet d'ouvrir un processus et de spécifier des options supplémentaires, notamment en fournissant le mot de passe SUDO en tant que paramètre :
<?php $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $process = proc_open( "sudo /path/to/script", $descriptorspec, $pipes ); // Write the password to stdin fwrite($pipes[0], "your_sudo_password\n"); fclose($pipes[0]); // Read stdout and stderr from pipes while (!feof($pipes[1])) { $stdout .= fgets($pipes[1]); } while (!feof($pipes[2])) { $stderr .= fgets($pipes[2]); } proc_close($process); ?>
Dans cet exemple, le mot de passe SUDO est fourni sous forme de chaîne dans l'instruction fwrite. Les deux méthodes atteignent efficacement l'objectif d'exécuter le script privilégié à partir de PHP sans être invité à saisir le mot de passe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!