2010-06-13 20 views
0

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 est root, 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.
+0

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'). –

Répondre

0

Exécutez-vous ce script en tant qu'utilisateur différent de stoysnet? Que se passe-t-il lorsque vous exécutez ls -l /home/stoysnet comme le même utilisateur que vous exécutez le script PHP?

Apparemment, vous devez exécuter le script en tant qu'utilisateur ayant la permission /home/stoysnet/. Quelles sont les permissions/propriétés dans le répertoire/home/stoysnet?