L'utilisateur d'Apache www-data
doit disposer de privilèges pour exécuter certaines applications à l'aide de sudo
.
- Exécutez la commande
sudo visudo
. En fait, nous voulons éditer le fichier en etc/sudoers
. Pour ce faire, en utilisant sudo visudo
dans le terminal, il duplique le sudoers
fichier (temp) à éditer.
- À la fin du fichier, ajoutez l'ex suivant: -si nous voulons utiliser la commande pour le
restart
smokeping et la php
commande pour une autre action dans votre question,
www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, usr/bin/php
(Cela suppose que vous souhaitez exécuter les commandes restart
et php
utiliser les privilèges de super utilisateur (root). Et vous utilisez la php
commande dans le usr/bin/
chemin d'accès)
Cependant, si vous souhaitez exécuter chaque application en utilisant les privilèges de super-utilisateur, ajoutez ce qui suit au lieu de ce qui est ci-dessus. Vous ne voudrez peut-être pas le faire, pas pour les ALL
commandes, très dangereux.
www-data ALL=NOPASSWD: ALL
3. Après avoir édité le fichier sudoers (par visudo
nous éditons le fichier temporaire sudoers
afin de sauvegarder et quitter le fichier temporaire (visudo) pour écrire dans le sudoers
fichier. ( wq!
)
4.C'est tout, utilisez maintenant exec()
ou shell_exec
de la manière suivante dans votre xxx.php
script. n'oubliez pas d'utiliser sudo
avant d' utiliser la commande dans le script php.
ex:-
exec ("sudo /etc/init.d/smokeping restart 2>&1");
ou
shell_exec("sudo php -v");
Donc, dans votre problème, ajoutez les commandes que vous souhaitez utiliser à l' step no (2.)
ajout et modifiez votre script php comme vous le souhaitez.
voici le même problème que le vôtre /programming//a/22953339/1862107
Thusitha Sumanadasa
la source
Essayez de spécifier le chemin complet vers le binaire php. Par exemple,
/usr/bin/php
Si vous ne le connaissez pas, trouvez-le en utilisant:
which php
la source
/var/log/httpd/error*
.Vous souhaitez généralement spécifier des chemins complets pour des applications telles que
whoami
,ls
etphp
. Si vous n'êtes pas sûr de l'emplacement d'un programme (chemin complet), vous pouvez le découvrir comme suit:Précisez-le ensuite ainsi dans votre script.
la source
echo shell_exec("/usr/bin/php somefile.php 2>&1")
:?hu
. Donc , vous devez vous assurer que le scriptphp
tente d'exécution est fixé comme suit:chmod 755 somescript.php
. Cela permettra à l'utilisateur sous lequel Apache est exécuté, d'être en mesure d'exécuter et de lire votre.php
fichier.Votre php.ini restreint-il le jeu de commandes disponible?
C'est de ma
/etc/php5/php.ini
la source
Comment déboguer les problèmes shell_exec
OK, nous avons ici un problème: quelque chose fonctionne dans le terminal et ne fonctionne pas dans shell_exec de php (ou exec, spawn, peu importe). Pensons: quelle est la différence entre vous et php? En voici trois:
PHP est exécuté à partir des règles du serveur HTTP
En effet, votre terminal fonctionne depuis l'
yourname
utilisateur et php est exécuté depuiswww-data
. Donc, la première idée est d'ouvrir le terminal depuis l'www-data
utilisateur et d'essayer la même commande. Donc..../etc/passwd
fichier, recherchez la ligne avec l'www-data
utilisateur et changez son shell de connexion (le dernier) de/bin/false
(ou autre) en/bin/bash
.www-data
Terminal ouvert :su www-data
/etc/passwd
fichier pendant que vous avez terminéPHP est exécuté à partir de PHP .
PHP est enogh paranoïaque et il y a beaucoup d'options dans la configuration apache / nginx et php.ini qui peuvent briser votre tentative.
C'est un peu plus compliqué à déboguer. Il y a deux options ici:
Activez les journaux dans le navigateur et voyez le problème. Modifiez votre
php.ini
, activezdisplay_errors
et tous les autres indicateurs pour voir les erreurs dans le navigateur. Ils Vous pouvez les lire et les déboguer.Obtenez
www-data
le shell (voir la première section) et exécutez quelque chose commeecho '<?php shell_exec("php -v"); ?>' | php
qui exécutera le même code php dans la console et vous pourrez voir les erreurs et le débogage.
PHP est exécuté à partir de SELinux / apparmor
Selinux et apparmor sont des éléments de sécurité qui interdisent aux applications d'effectuer des actions spécifiques (par exemple, la génération d'autres applications ou certaines autres applications spécifiques). Il est peut-être activé sur votre serveur.
Pour vérifier - désactivez selinux / apparmor et vérifiez si le problème existe.
Pour corriger - lisez le manuel approprié et corrigez les règles permissives d'écriture pour votre cas.
la source
Pour moi, le moyen le plus simple était d'aller dans le php.ini et de commenter la ligne qui commence par
la source