Maison  >  Article  >  développement back-end  >  Comment exécuter des scripts Shell élevés à partir de PHP en utilisant « sudo » ?

Comment exécuter des scripts Shell élevés à partir de PHP en utilisant « sudo » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-19 17:13:03886parcourir

How to Run Elevated Shell Scripts from PHP Using `sudo`?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn