2015-09-30 1 views
0

J'ai un script bash qui prend un paramètre appelé dans PHP par shell_exec (paramètre script.sh). Fondamentalement, mon but est d'appeler un script qui appartient à un autre utilisateur qui n'est pas apache.Script PHP Bash appelant un autre script Bash

Le script script.sh est un fichier qui contient les éléments suivants (en ce moment il y a des commandes de gestion des erreurs):

#/bin/bash 
whoami>>whoami 
echo $1 >> parameter 
while read f; do 
env>>envoutput 
sudo -i -u archivescriptowner /path/to/archivescript.sh -command archive >> output 
done < $1 

Dans mon fichier/etc/sudoers, je donne les résultats suivants:

apache ALL=(archivescriptowner) NOPASSWD: /bin/bash -c /path/to/archivescript.sh * 

Lorsque j'exécute ce script en exécutant su -s /bin/bash apache et que je passe un paramètre, cela fonctionne.

Quand je lance via mon bouton en php, archivescript.sh n'exécute pas

Le fichier whoami a APACHE écrit ce

Le fichier de paramètres a le bon fichier écrit à ce

env montre les éléments suivants

Term=xterm 
LD_LIBRARY_PATH=/path/to/library 
PATH=/sbin/:usr/sbin:/bin:/usr/bin 
PWD=/var/www/html 
LANG=C 
SHLVL=4 
=/bin/env 

PWD est la sortie à droite, qui est où mon script est en ce moment, il sera déplacé à l'avenir.

Le fichier de sortie lorsqu'il est exécuté en cliquant sur le bouton est vide.

Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. Toute idée serait utile. S'il vous plaît laissez-moi savoir si j'ai besoin de donner des informations supplémentaires.

+0

Je pense que la 'entrée sudoers' devrait simplement dire'/chemin/vers/archivescript.sh', sans '/ bin/bash -c' avant. – Barmar

+0

Non, cela n'a probablement rien à voir avec le problème. Il y a beaucoup de choses ici qui sont très jd ici - le haut de ma liste de choses à vérifier est de savoir si le drapeau '-i' cause des complications et si le serveur web exécute chroot. – symcbean

+0

@Barmar Enlever/bin/bash -c demande un mot de passe lors de la connexion en tant qu'utilisateur apache et ne fonctionne pas non plus pour le php. Cela étant dit, si je supprime sudo -i, enlever/bin/bash -c fonctionne pour l'utilisateur apache, mais pas avec php. – user3481541

Répondre

1

J'ai récemment publié un projet qui permet à PHP d'obtenir et d'interagir avec un vrai shell Bash. Obtenez ici: https://github.com/merlinthemagic/MTS

Après le téléchargement souhaitez simplement utiliser le code suivant:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 

$return1 = $shell->exeCmd('/path/to/archivescript.sh'); 

echo $return1; //return from your script