Impossible d'appeler des commandes système et des scripts shell à partir de PHP Fedora 10

StackOverflow https://stackoverflow.com/questions/637430

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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top