2009-03-12 6 views
0

Ich arbeite an einer Anwendung, die lokal auf einem Fedora 10-Rechner über PHP und Apache läuft. Es hängt von einem Prozess ab, der im Hintergrund abläuft.Systembefehle und Shell-Skripte von PHP Fedora 10 kann nicht aufgerufen werden

Die übergeordneten Benutzer möchten den Prozess über den Browser starten/stoppen/neu starten können. Ich habe versucht, dies zum Laufen zu bringen, indem PHP mit exec() und shell_exec Aufrufe an das System macht, aber es scheint nicht zu funktionieren.

Wenn ich versuche, den Prozess mit "exec ('processName')" zu starten, passiert nichts.

Wenn ich versuche, "exec ('killall processName')" zu verwenden, startet SELinux ständig Warnmeldungen, dass der Prozess erlaubt wurde (weil ich es in permissive Modus), aber es tötet den Prozess nicht tatsächlich! Aber das scheint weiterzugehen, auch nachdem die Seite voll geladen ist!?!?

Ich bin in der Lage, ein anderes Skript auf ähnliche Weise aufzurufen: "exec ('/ var/www/cgi-bin/ControlProgram START')". Ich bin mir also nicht wirklich sicher, was die Hauptunterschiede zwischen den beiden Aufrufen/Befehlen sind.

Ich habe auch den Skriptaufruf in die Datei /etc/rc.local gesetzt, damit das Skript bei der Anmeldung ausgeführt wird. Kann ich dieses Skript jedoch von PHP abschaffen, da es von ... dem System ausgeführt wird?

Ich bin kein Guru, wenn es um Berechtigungen/SELinux kommt, also nicht auf die blutigen Details verschonen! Danke im Voraus!

+0

Danke für die Antworten bisher. Ich werde heute Abend deine Beispiele ausprobieren, Aaron. Nolte, ich glaube nicht, dass ich die php.ini sehr verändert habe, aber ich werde nachsehen. Vielen Dank. –

Antwort

0

Ich glaube, ich habe das Problem gefunden. Ich bin immer noch nicht genau sicher, was das Problem ist, aber es sieht so aus, als ob es etwas mit Datei-/Verzeichnisberechtigungen zu tun hat. Wenn ich die Skripte in mein Verzeichnis/var/www/html verschoben habe, wurden die Skripts ausgeführt. Ich habe sie nach/var/www/cgi-bin verschoben und sie arbeiten dort auch. Es könnte also etwas sein, bei dem Apache keine Skripte ausführen kann, die sich außerhalb des Verzeichnisses/var/www befinden, oder zumindest nicht direkt. Danke für Ihre Hilfe!

1

Wenn Sie administrative Kontrolle über dieses System haben, sollten Sie die PHP-Konfiguration überprüfen (stellen Sie sicher, dass es das Konfigurationsprofil für den Webserver ist).

Safe_Mode verhindert, dass PHP irgendetwas außerhalb eines bestimmten Ordners ausführt. In einer Shared-Hosting-Umgebung bedeutet dies normalerweise, dass Sie nur Dinge ausführen können, die sich auf Ihren home/www-Ordner beziehen. Dies scheint auf Grundlage Ihrer Notizen der Fall zu sein.

+0

abgesicherten Modus ist aus :( –

0

Es klingt wie Old School Unix Berechtigungen und wie Apache funktioniert. Ich erinnere mich (obwohl es schon einige Zeit her ist), dass Apache vorsichtig ist, was es ausführen wird. Überprüfe deine Oktale.

Um zu überprüfen, dass es nicht SELinux ist, können Sie es deaktivieren, anstatt es in permissive zu setzen. Dies führt jedoch dazu, dass das Dateisystem umbenannt wird (oder sollte). An diesem Punkt könnten Ihre erweiterten Attribute mit den SELinux-Kontexten aus dem Gleichgewicht geraten und SELinux-Probleme verursachen, sobald sie erneut durchgesetzt werden.