AlexBausW: mod_php und Apache als User 'nobody'

Beitrag lesen

Hallo

Auf einem Suse 7.3 Linux-Rechner läuft ein frischkompilierter Apache 1.3.26 mit PHP 4.2.1 als Modul. mod_php wurde noch unter Apache 1.3.22 kompiliert, was aber angeblich keine Problem bereiten soll und eigentlich auch nicht tut, außer daß mit phpinfo() in der Sektion "apache" noch die alte Version gemeldet wird:

APACHE_INCLUDE
           APACHE_TARGET
           Apache Version Apache/1.3.22
           Apache Release 10322100
           Apache API Version 19990320
           Hostname:Port dynamicwebdevelopment.de:80
           User/Group  nobody(65534)/101
           .
           .
           .

safe_mode ist on.

Der Apache läuft unter User und Group nobody. In den VirtualHost-Einträgen werden User und Group der "Kunden" zugewiesen, sowie open_basedir und upload_tmp_dir für PHP gesetzt:

DocumentRoot /home/userXX/html
 User userXX
 Group users
 ScriptAlias /cgi-bin/ /home/userXX/html/cgi-bin/
 php_admin_value open_basedir /home/userXX
 php_admin_value upload_tmp_dir /home/userXX/phptmp

Folgende Probleme sind bei dieser Konstellation aufgetaucht:

1.) Bisher hatte ich so verstanden, daß PHP im safe_mode die UID des Ausführenden und des Besitzers einer Datei prüft, und nur bei Übereinstimmung das Ausführen zulässt.
Wenn ich aber im Homeverzeichnis eines Users eine root gehörende php-Datei mit Rechten -rw-r--r-- liegen habe, führt mod_php diese aus, obwohl sie nicht dem User des Verzeichnisses gehört. Erst wenn ich die Rechte für "Andere" entferne, kann PHP diese als 'nobody' nicht mehr ausführen.

Vermutlich unterlag ich also einem Irrtum. PHP überprüft nicht nur den Nutzer, sondern richtet sich auch, bzw. vor allem nach den Nutzerrechten.
Ist dieses Verhalten so wie beschrieben korrekt und habe ich einfach nur nicht richtig in der Doku gelesen, oder kann ich mod_php "zwingen" nur dem User gehörende Skripte auszuführen?

2.) Da PHP ja zusammen mit dem Apachen als 'nobody' arbeitet, schreibt PHP auch Dateien als 'nobody' auf die Platte. Dies ergibt seltsamerweise ein Problem, wenn das PHP-Skript eines Users versucht in ein so generiertes Verzeichnisse (drwxr-xr-x) zu schreiben. Dies funktioniert dann nämlich nicht und wird mit:
[Thu Jun 27 18:14:43 2002] [error] PHP Warning:  SAFE MODE Restriction in effect.  The script whose uid is 639 is not allowed to access newdir owned by uid 65534 in /home/userXX/html/test/php/makefile.php on line 1
abgebrochen.

Wenn das Verzeichnis dem richtigen User gehört (per Hand korrigiert) bekomme ich immerhin folgende Fehlermeldung:
[Thu Jun 27 18:19:12 2002] [error] PHP Warning:  mkdir() failed (Permission denied) in /home/ws4/html/test/php/makefile.php on line 1

Erst wenn für "Others" auch Schreibrechte existieren (drwxr-xrwx), kann in dieses Verzeichnis geschrieben werden.
Es scheint so, als wenn PHP einmal nicht schreibt weil das schreibende Skript einem anderen User gehört, als das Verzeichnis (unterhalb des gleichen open_basedir) und das andere mal, weil PHP als 'nobody' keine Schreibrechte für das Verzeichnis besitzt.

Gibt es für diese Problematik eine Lösung auf Ebene der Konfiguration von PHP und/oder Apache, oder muss etwas an den Dateirechten verändert werden, so daß PHP in die selbst erzeugten Verzeichnisse wieder schreiben kann?

Ich hoffe, nicht bis zur nächsten Version von Apache/PHP warten zu müssen, sondern die Dokumentation schlecht gelesen zu haben. ;))

Gruß Alex
--
http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart