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

Mary-Kate Olsen
Libérer: 2024-11-19 17:13:03
original
886 Les gens l'ont consulté

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
Copier après la connexion

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);
?>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal