2010-01-13 8 views
0

Je suis dans un peu de problème et j'ai besoin d'exécuter une commande linux comme sudo en utilisant php. Est-ce possible en utilisant exec() de php? J'ai essayé mais je ne peux pas entrer le mot de passe sudo et ensuite exécuter une autre commande sur le même appel exec().PHP: exécuter la commande linux comme sudo?

edit: je ne peux pas accéder au serveur à distance via ssh en raison de sa propre stupidité. C'est pourquoi je dois exécuter des commandes à travers le serveur web.

Répondre

2

Vous pouvez accorder des privilèges pour une commande à un utilisateur donné (tel que l'utilisateur qui exécute votre serveur web ...) avec visudo, ou devez utiliser le programme que vous voulez exécuter, mais je vous déconseille fortement de le faire ce. Ne pouvez-vous pas utiliser un moyen plus sûr, par exemple écrire des données dans une base de données, et construire un robot démon qui regarde souvent dans la base de données, accomplir le travail, et ce démon pourrait être accordé en tant que root?

1

Vous devez configurer votre sudoers pour ne pas avoir besoin d'un mot de passe (NOPASSWD:) pour l'utilisateur sur lequel votre PHP s'exécute. Assurez-vous de verrouiller complètement les commandes que cet utilisateur peut exécuter via sudo!

+2

Utilisez visudo pour effectuer l'édition. –

+0

vi est douloureux, mais avec nano, vous pouvez sérieusement bousiller le fichier sudoers ... me suis bloqué une fois sur une instance ec2, parce que je ne pouvais pas sudo: P –

+0

@PeteHerbertPenito: Vous pouvez utiliser nano avec visudo. Ajoutez simplement la ligne 'Defaults editor =/usr/bin/nano' ou similaire à vos sudoers. Ensuite, à l'avenir, utilisez toujours 'visudo'! Il vérifie la syntaxe pour vous. –

0

Utilisez proc_open qui vous permet de créer un tube personnalisé pour alimenter les données (mot de passe de l'utilisateur) lorsque vous y êtes invité. Voir les commentaires sur le lien pour les moyens de créer un tuyau de mot de passe personnalisé.

Mettez à jour, puisque vous ne pouvez pas lire.

Snippet de commentaire par snowleopard à point amusées NOSPAMPLEASE point au com dot au 05 juin 2008 02h46 au deux fois auparavant lien mentionné. Vous avez juste besoin d'appliquer cela à votre propre situation.

// Set up the descriptors 
    $Descriptors = array(
     0 => array("pipe", "r"), 
     1 => array("pipe", "w"), 
     2 => array("pipe", "w"), 
     3 => array("pipe", "r") // This is the pipe we can feed the password into 
    ); 

    // Build the command line and start the process 
    $CommandLine = $GPGPath . ' --homedir ' . $HomeDir . ' --quiet --batch --local-user "' . $Identity . '" --passphrase-fd 3 --decrypt -'; 
    $ProcessHandle = proc_open($CommandLine, $Descriptors, $Pipes); 

    if(is_resource($ProcessHandle)) { 
     // Push passphrase to custom pipe 
     fwrite($Pipes[3], $PassPhrase); 
     fclose($Pipes[3]); 
+0

Désolé, mais je ne peux pas comprendre comment utiliser proc_open. Des idées? – WhyKiki

+2

wtf est votre problème? Je suis nouveau à PHP et je ne sais pas comment faire ce genre de choses. Secousse. – WhyKiki

Questions connexes