Impossible d'appeler des commandes système et des scripts shell à partir de PHP Fedora 10
Question
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.
Les cadres supérieurs veulent pouvoir démarrer / arrêter / redémarrer le processus via le navigateur. J'essayais de faire en sorte que cela fonctionne en faisant appeler PHP par le système à l'aide de exec () et shell_exec, mais cela ne semble pas fonctionner.
Lorsque j'essaie de démarrer le processus à l'aide de "exec ('nomprocessus')", rien ne se passe.
Lorsque j'essaie d'utiliser "exec ('killall nomduprocessus')", SELinux commence à afficher constamment des avertissements indiquant que le processus était autorisé (car je l'ai mis en mode permissif), mais ne le détruit pas réellement. ! Mais cela semble se poursuivre même après le chargement complet de la page!?!?
Je peux appeler un autre script de la même manière: "exec ('/ var / www / cgi-bin / ControlProgram START')". Je ne suis donc pas vraiment sûr des 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 soit exécuté lors de la connexion. Cependant, serai-je capable de tuer ce script depuis PHP depuis son exécution par ... le système?
Je ne suis pas un gourou en matière de permissions / SELinux, alors n’épargnez pas les détails sanglants! Merci d'avance!
La solution 2
Je pense avoir trouvé le problème. Je ne sais toujours pas quel est le problème, mais il semble que cela ait quelque chose à voir avec les autorisations de fichiers / répertoires. Lorsque j'ai déplacé les scripts dans mon répertoire / var / www / html, ils ont été exécutés. Je les ai déplacés dans / var / www / cgi-bin et ils y travaillent également. Apache pourrait donc ne pas pouvoir exécuter des scripts en dehors du répertoire / var / www, ou du moins ne pas le faire directement. Merci pour votre aide cependant!
Autres conseils
Si vous avez le contrôle administratif sur ce système, vous voudrez 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 tâches relatives à votre dossier home / www, ce qui semble être le cas en fonction de vos notes.
Cela ressemble aux autorisations unix de la vieille école et à la manière dont fonctionne Apache. Je me souviens (même si cela fait un certain temps) qu'Apache fait attention à ce qu'il va exécuter. Vérifiez bien vos octaux.
Pour vérifier que ce n'est pas SELinux, vous pouvez le désactiver au lieu de le mettre en mode permissif. bien que cela provoque un ré-étiquetage du système de fichiers (ou devrait). À ce stade, vos attributs étendus avec les contextes SELinux pourraient s’échapper et causer des problèmes à SELinux une fois de plus dans l’application.