J'ai un script très simple qui consiste à vérifier si l'exécution d'un shell_exec (ou opérateur backtick) fonctionne essentiellement:Commande PHP ligne avec des œuvres shell_exec pour racine mais pas d'autres
#!/usr/bin/php5
<?php
echo "This is a PHP script\n";
echo `ls -l /home/stoysnet/`;
À moins que je cours en tant que root, il me donne toujours:
$ ./foo.php
This is a PHP script
Warning: _shell_exec(): Permission Denied in /home/stoysnet/foo.php on line 5
J'ai essayé d'exécuter cette via PHP en quelques différentes façons, mais je reçois toujours la même erreur. Toutefois, lorsque je mets le script dans un sous-répertoire de /etc/
appartenant à root:root
et exécuté comme root
cela fonctionne.
Ce qui donne?
Mise à jour: Juste pour clarifier:
- Je suis en train de l'exécuter en tant qu'utilisateur
stoysnet
via la ligne de commande. Je suis en mesure d'exécuter la commande passée àshell_exec
via la même session. - Si je déplace le script vers
/etc/somedir/
et que l'exécution estroot
, cela fonctionne comme prévu. - Le script exécute lui-même, tout simplement pas l'opérateur de backtick ou
shell_exec
partie - autorisations d'exécution sont définies et
777
ne fonctionne pas non plus.
Pour être capable de 'ls' un répertoire (par exemple: list/énumérer son contenu), l'utilisateur exécutant le script doit avoir des permissions d'exécution sur le répertoire (soit en tant que propriétaire, soit en tant que 'tout le monde'). –