2009-03-12 21 views
0

Je travaille sur une application qui s'exécute localement sur une machine Fedora 10 via PHP et Apache. Cela dépend d'un processus qui s'exécute en arrière-plan.Impossible d'appeler les commandes système et les scripts shell à partir de PHP Fedora 10

Les utilisateurs supérieurs souhaitent pouvoir démarrer/arrêter/redémarrer le processus via le navigateur. J'essayais de faire fonctionner cela en demandant à PHP de passer des appels au système en utilisant exec() et shell_exec, mais cela ne semble pas fonctionner. Lorsque j'essaie de démarrer le processus en utilisant "exec ('processName')", rien ne se passe. Lorsque j'essaie d'utiliser "exec ('killall processName')", SELinux lance constamment des avertissements que le processus a été autorisé (parce que je l'ai mis en mode permissif), mais il ne tue pas réellement le processus! Mais cela semble continuer même après que la page soit complètement chargée!?!?

Je suis capable d'appeler un autre script de la même manière: "exec ('/ var/www/cgi-bin/ControlProgram START')". Donc, je ne suis pas vraiment sûr quelles sont les différences majeures entre les deux appels/commandes.

J'ai également placé l'appel de script dans le fichier /etc/rc.local pour que le script s'exécute à la connexion. Cependant, serai-je capable de tuer ce script de PHP depuis son exécution par ... le système?

Je ne suis pas un gourou quand il s'agit de permissions/SELinux, alors n'épargnez pas sur les détails sanglants! Merci d'avance!

+0

Merci pour les réponses à ce jour. Je vais essayer vos exemples ce soir Aaron. Nolte, je ne pense pas avoir beaucoup modifié le php.ini, mais je vais vérifier. Merci. –

Répondre

0

Je crois avoir trouvé le problème. Je ne sais toujours pas exactement quel est le problème, mais il semble que cela ait quelque chose à voir avec les permissions de fichiers/répertoires. Lorsque j'ai déplacé les scripts dans mon répertoire/var/www/html, les scripts ont été exécutés. Je les ai déplacés dans/var/www/cgi-bin et ils y travaillent aussi. Cela peut donc être quelque chose où Apache ne peut pas exécuter les scripts qui sont en dehors du répertoire/var/www, ou du moins ne peut pas le faire directement. Merci quand même pour vôtre aide!

1

Si vous avez un contrôle administratif sur ce système, vous devez vérifier la configuration de PHP (assurez-vous qu'il s'agit du profil de configuration du serveur Web). Safe_Mode empêchera PHP d'exécuter quoi que ce soit en dehors d'un dossier particulier.

Dans un environnement d'hébergement partagé, cela signifie généralement que vous ne pouvez exécuter que des éléments relatifs à votre dossier home/www, ce qui semble être le cas selon vos notes.

+0

le mode sans échec est désactivé :( –

0

Cela ressemble à des permissions old school Unix et comment fonctionne apache. Je me souviens (bien que cela fasse longtemps) qu'apache fait attention à ce qu'il va exécuter. Vérifiez vos octals.

Pour vérifier que ce n'est pas SELinux, vous pouvez le désactiver au lieu de le mettre en permissif. Bien que cela provoquera un système de fichiers relabel (ou devrait). À ce stade, vos attributs étendus avec les contextes SELinux pourraient se dégrader et causer des problèmes SELinux une fois en vigueur à nouveau.