Apache2+PHP5.1 : vhost+disable_functions funktioniert nicht

Ich wollt grad mal ein kleines shellscript über meinen Webserver ausführen:
Code:
Warning: shell_exec() has been disabled for security reasons in /servers/clients/...php on line 24

Ah, ich hab shell exec ja deaktiviert... ab in die Apache-config und den entsprechenden vHost bearbeitet:
Code:
   ServerName blablubb.*
   ServerAlias blablubb.*
   ServerAdmin bla@blubb.org

   DocumentRoot "/servers/clients/.../"

   <Directory /servers/clients/.../>
      Options       ALL
      AllowOverride ALL
      Order         ALLOW,DENY
      ALLOW from all
   </Directory>

   [...]

   php_admin_value disable_functions none

Apache neu gestartet, Script ausgeführt:
Code:
Warning: shell_exec() has been disabled for security reasons in /servers/clients/...php on line 24

ok...
in der php.ini shell_exec aus disable_functions entfernt, und siehe da er führt das Script aus...
Das kann natürlich nicht so bleiben, wieder ab in die Apache-config und bei allen andern vHosts die ganzen deaktivierten Funktionen mit
Code:
php_admin_value disable_functions func1,func2,...,funcn
reingepackt...
Apache neu gestartet...
Zum Test auch bei dem Host der das Script ausführen soll, und komischerweise führt er das Script jetzt immernoch aus...

Es sieht ganz danach aus alsob er entweder das disable_functions in der apache-config garnet frisst, oder alsob irgendwas dies wieder überschreibt...

Weis heir jemand an was das liegen könnte?
 
Wenn es ein Apache2 direkt von Debian ist, dann hat PHP dort mehrere Config-Dateien. Da exec()-Funktionen grundsätzlich eine Shell aufrufen, solltest du auch die CLI-Konfiguration für PHP entsprechend anpassen.
 
und wie kann ich diese für jeden vHost seperat bestimmen?

natoll, jetzt hab ich solang dran rumgefummelt bis inzwischen trotz disable_functions = exec,shell_exec,... in allen configs trotzdem jeder diese befehle ausführen darf...

Ich will einfach nur erreichen dass ich festlegen kann welcher vHost in die shell darf...

Ich benötige nämlich für ein Admin-Interface einige shellscripte auf dem server, allerdings soll auch net grad jeder andere auf dem Server irgendwelche Scripte ausführen können...

Kann mir hir irgendwer erklären wie ich das anstellen kann?
 
Damit das funktioniert, müßte PHP als CGI laufen und nicht als mod_php. Mit einem Default-Server von Debian dürfte das schwierig werden. Die einzige Möglichkeit, die ich da sehe ist die Änderung der PHP-Einstellungen über die htaccess. Und das könnte dann (logischerweise) jedes VHost. Mein Rat: Installiere für dein Webadmin-Interface einen extra Webserver, den du auf einen anderen Port setzt. Damit kannst du den "User-Server" restrikten und den "Admin-Server" mit erweiterten Rechten versehen. Zum manuellen Einrichten eines Apache aus dem Source schau dir einfach mal LAMP-Einrichtung an. Ein zweiter Server für das Admin-Interface wäre auf jeden Fall die sauberste Lösung, da du dort schon beim Kompilieren dafür sorgen kannst, daß er eine komplett andere php.ini nutzt als der normale Webserver.
 
ok... der zweite server läuft übrigens...

Doch meine Vermutung hat sich bestätigt:

Code:
php_admin_value disable_functions function_1,function_2,function_n
wird von PHP-Scripten anscheinend ignoriert.

Ich hab jetzt nochmal testweise in der PHP.ini alle Funktionen erlaubt
Code:
disable_functions =
bzw diese auskommentiert
Code:
; disable_functions =

Dann in der Apache-Config unter dem entsprechenden vHost die Funktion ini_set deaktiviert:
Code:
php_admin_value disable_functions ini_set

phpinfo() zeigt mir zwar folgendes an:
Code:
disable_functions		ini_set		no value

wenn ich jetzt zum aber zB folgenden php-code ausführe:
PHP:
 ini_set('log_errors','Off')

steht in php_info weiterhin der alte Wert (On) jedoch steht in der Logfile keine Fehlermeldung (ich hab einen Parsingfehler erzwungen)...

Das heist er hat diesen Wert "log_errors Off" von ini_set() übernommen, obwohl ini_set laut disable_funktions deaktiviert ist...

---

phpinfo() zeigt immerdie korrekten Werte an, die Scripte werden allerdings nicht anch diesen vorgaben geparst...

An was kann das liegen?
Ist dies ein Bug in PHP5.1 oder liegt es an der x86_64 Architektur des Servers?!
Hat PHP damit Probleme?

Ich bin hier echt am verzweifeln...

PS: Dieser Fehler tritt sowohl bei dem selbstkompilierten, als auch bei dem aus dem Paket installieren (apt-get) Apache auf...
Der Apache ist übrigens auch auf dem neuesten Stand (2.2)
 
Der Fehler ist allerdings seltsam. Hast du irgendwelche Warnungen in den Apache-Logs (access.log, error.log) beim Starten des Webservers oder beim Aufruf einer Seite? Bist du sicher, daß er diese php.ini auch verwendet und nicht an einem komplett anderen Ort sucht? Für mich klingt der Fehler nämlich so, als würde er die php.ini einfach mißachten.
 
Das komisch ist ja das er den Rest richtig übernimmt:

Code:
NameVirtualHost *

<VirtualHost *>
   ServerName blablubb.*
   ServerAlias blablubb.*
   ServerAdmin bla@blubb.org

   DocumentRoot "/servers/clients/blablubb/web/"

   <Directory /servers/clients/blablubb/web/>
      Options       NONE
      AllowOverride ALL
      Order         ALLOW,DENY
      ALLOW from ALL
   </Directory>

   php_admin_value open_basedir "/servers/clients/blablubb:/usr/share/"
   php_admin_value upload_tmp_dir "/servers/clients/blablubb/res/upload_tmp/"
   php_admin_value session.save_path "/servers/clients/blablubb/res/sessions/"
   php_admin_value error_log "/servers/clients/blablubb/res/error.log"

   php_admin_value disable_functions "ini_set"
</VirtualHost>

Er übernimmt alles außer das disable_functions...
ich hab übrigens folgende Versionen ausprobiert:

Code:
   php_admin_value disable_functions "exec,shell_exec,ini_set,..."
   php_admin_value disable_functions "exec, shell_exec, ini_set, ..."
   php_admin_value disable_functions "exec shell_exec ini_set ..."
   php_admin_value disable_functions exec,shell_exec,ini_set,...
   php_admin_value disable_functions exec, shell_exec, ini_set, ...
   php_admin_value disable_functions exec shell_exec ini_set ...
Nichts davon funktioniert...

In der Error/Accesslog steht nichts was hierfür relevant wäre...
Code:
[Fri Apr 06 17:08:07 2007] [notice] Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8a DAV/2 PHP/5.2.1 configured -- resuming normal operations
[...]

[ EDIT: ] so, jetzt steht sogar die richtige log drin ^^
 
Bei disable_functions müssen die Funktionen mit Semikolon getrennt werden und die Liste muss in doppelten Anführungszeichen stehen.

Code:
php_admin_value disable_functions "ini_set;exec;system;shell_exec"

Daß er es allerdings bei dem einzelnen ini_set nicht übernimmt, ist schon recht seltsam. Evtl. solltest du dich damit mal direkt an die PHP-Entwickler wenden: http://www.php.net/mailing-lists.php <- "Installation issues and problems" sollte hier für's erste die richtige Liste sein.
 
er übernimmt es trotzdem nicht... :(

Code:
php_admin_value disable_functions "ini_set;exec;shell_exec;..."
bzw
php_admin_value disable_functions "ini_set; exec; shell_exec; ..."

Ich hab jetzt nochmal bissel gegooglet und herausgefunden dass diese Option bis einschließlich php4.x nicht verfügbar war / ignoriert wurde...
Jedoch konnte ich bis jetzt nicht herausfinden ob es in PHP5 nun implementiert wurde...

[ EDIT: ]
funktioniert es denn bei dir?
Wenn ja schreib' mit mal bitte deine PHP-version :) dann teste ich es nochmal...
 
Zurück
Oben