L'exécution d'un script shell à partir d'un script PHP

Je veux exécuter un script Bash présents sur le système à partir d'un script PHP. J'ai deux scripts présents sur le système. L'un d'eux est un script PHP appelé client.php présents à /var/www/html et l'autre est un script Bash appelé testscript présents à /home/testuser.

Mon client.php script ressemble

<?php
  $message=shell_exec("/home/testuser/testscript 2>&1");
  print_r($message);
?>  

Mon testscript ressemble

#!/bin/bash
echo "Testscript run succesful"

Quand je fais le suivant sur la borne

php client.php

- Je obtenir la sortie suivante sur la borne

Testscript run successful

Mais quand j'ouvre la page à

http://serverdomain/client.php

- Je obtenir la sortie suivante

sh: /home/testuser/testscript: Permission denied 

J'obtiens cette erreur, même après que j'ai fait un chmod +x testscript.

Comment puis-je le faire fonctionner à partir du navigateur? S'il vous plaît aider.

  • Que diriez - read autorisation? Execute autorisation est inutile sans read autorisation.
  • Apache ne va pas avoir les autorisations pour atteindre dans votre répertoire home. Ni si jamais vous voulez vraiment. Rappelez-vous qu'il ne suffit pas d'accorder des droits pour le script. Vous avez à accorder l'accès à des répertoires, c'est ainsi. par exemple, si je mets un "libre, tenir un" journal de titulaire à l'intérieur d'un coffre de banque, on ne peut prendre les papiers, même s'ils sont gratuits.
  • J'ai oublié le chemin des autorisations. Et une bonne analogie.
  • je n'ai ls-l et a obtenu le résultat suivant: -rwxr-xr-x 1 apache apache 236 Jun 17 14:05 testscript. Alors, comment dois-je faire? Où dois-je conserver le script, de sorte qu'il peut être exécuté par le script php à partir du navigateur ainsi que le script bash peut exécuter en tant que root.
  • le script n'est pas le problème. il est de votre répertoire d'accueil. apache ne peut pas atteindre en elle. ne donnez pas à apache l'autorisation de le faire. déplacer le script quelque part où apache PEUT obtenir à elle.
  • je veux le testscript d'avoir les privilèges root. donc je ne peux pas le déplacer dans le répertoire /var/www/html?
  • Voir ma réponse. peu importe où il est. la racine peut faire quelque chose et tout, même si la racine n'est pas le propriétaire.
  • google pour visudo NOPASSWD
  • Vous aurez besoin de grand sudo autorisations de votre serveur sur ce script. Ou enveloppez-le script dans un binaire suid. Mais de toute façon, être très très très TRÈS TRÈS prudent. Appeler le script de mal, passer autour de certaines données de mal, et que vous avez fournies pour les utilisateurs distants avec un shell root sur votre serveur, et boom va de votre serveur.
  • C'est appelé comme un mauvaise idée. 🙂 Il suffit de ne pas le faire. Vrai risque de sécurité.
  • je veux le php pour exécuter le script et l'exécuter en tant que root. Sinon, comment puis-je le faire?
  • Une autre méthode est en cours d'exécution d'un démon avec les privilèges appropriés, ce qui n'est pas accessible de l'extérieur le serveur, et écoute très spécifique dans la liste blanche des demandes locales seulement. Toujours être très prudent, mais beaucoup mieux de donner du serveur web de ces privilèges.
  • Au lieu de #!/bin/bash vous devez utiliser Posix #!/usr/bin/env bash. Il doit localiser Bash dans d'autres endroits, comme /usr/local/bin si le présent et sur le chemin.

InformationsquelleAutor nmadhok | 2013-06-17