Installationsanleitungen

PHP über mod_php im safe_mode

PHP über mod_php, d.h. über ein in den Apache-Webserver integriertes Modul, steht ab dem 31.07.2008 nur noch für Nutzer der Option "eigene httpd.conf" zur Verfügung. Unter mod_php steht die Funktion mail() nicht zur Verfügung.

Im Fall der Verwendung von mod_php braucht für die Ausführung eines PHP-Skriptes, also den Abruf einer PHP-Webseite, kein separates Programm gestartet werden. Dieses ergibt zwar eine sehr effiziente Ausführung von PHP-Programmen, aber logischerweise werden die PHP-Skripte dann mit den Rechten des Webservers, i.d.R. als User httpd ausgeführt. Damit man nun über diesen Weg nicht Zugriff auf die Websites fremder Websites erhält, läuft mod_php im so genannten safe_mode.

Da nicht alle PHP-Module den safe_mode unterstützen, können diese leider auch nicht alle zur Verfügung gestellt werden, da Sicherheit bei Hostsharing sehr ernst genommen wird.

Ein weiteres Problem mit dem safe_mode ist die Tatsache, dass per Skript angelegte Dateien auch logischerweise dem User gehören, unter dem der Webserver läuft, also i.d.R. httpd. Daher sollten Verzeichnisse, in denen PHP-Skripte neue Dateien anlegen, das gid- (Group-ID) und uid- (User-ID) Flag gesetzt haben. Diese Flags bewirken, dass neu angelegte Dateien demselben User gehören und derselben Gruppe zugeordnet sind, wie das Verzeichnis. Ansonsten hat man u.U. selbst hinterher Probleme, diese Dateien überhaupt wieder zu lesen, da sie einem nicht gehören. Insbesondere das Skript selbst wird man wegen des safe_mode nicht mehr öffnen können, weil im safe_mode geprüft wird, ob die zu öffnende Datei demselben User gehört, dem auch das Skript gehört.

Soll also z.B. das Verzeichnis doms/example.com/var/data von einem PHP-Skript für die Erzeugung neuer Dateien genutzt werden, dann können diese Flags wie folgt gesetzt werden (hier wird vorausgesetzt, dass xyz00-hans der Domain-Admin der genannten Domain ist):

xyz00-hans@hopi:~$ cd ~/doms/example.com/var
xyz00-hans@hopi:~/doms/example.com/var$ mkdir data
xyz00-hans@hopi:~/doms/example.com/var$ chmod ug+s data

Egal, wer nun Dateien in diesem Verzeichnis anlegt, sie werden initial immer dem User xyz00-hans und der Gruppe xyz00 zugeordnet sein. Damit kann PHP diese Dateien auch im safe_mode wieder öffnen.

Nichtsdestotrotz ist bei den Datei-Rechten immer zu beachten, dass der User httpd die Rechte haben muss, auf die Datei zuzugreifen, erst PHP selbst führt weiter einschränkende Prüfungen aus. D.h., soll das Skript eine Datei lesen bzw. schreiben können, müssen folgende Rechte vergeben werden:

xyz00-hans@hopi:~/doms/example.com/var$ chmod 644 diese_datei_liest_php.txt
xyz00-hans@hopi:~/doms/example.com/var$ chmod 666 diese_datei_liest_und_schreibt_php.txt

Daten sollten außerdem möglichst außerhalb des Dokumentbaumes gespeichert werden. Bei der Delegation von Subdomains an andere User wird dies etwas schwierig, da der User, dem das Skript gehört, auch der User sein muss, dem die Daten gehören, sonst verweigert der safe_mode den Zugriff. Daher funktionieren die o.g. Beispiele in diesem Fall auch nicht 1:1! Bitte in diesem Fall das Daten-Verzeichnis unterhalb des Dokument-Verzeichnisses (z.B. unterhalb von www) anlegen, und dieses Verzeichnis mit einer .htaccess Datei vor dem direkten Zugriff schützen. Siehe .htaccess.

Geändert am: 03.06.2008, 18:56 Uhr
Nach oben
Druckversion