Sönke Tesch: mod_php und Apache als User 'nobody'

Beitrag lesen

PHP prüft lediglich, ob eine zu bearbeitende Datei dem Benutzer gehört, dem auch das Skript gehört, welches diese Datei bearbeiten will. Mit dem Benutzer, unter dem Apache läuft, hat das nichts zu tun.

Irgendwie finde ich das von den Entwicklern nicht weit sehr gedacht (ich will natürlich niemandem zu nahe treten :).

Das haben sie ja auch in der Einleitung zu Safe Mode geschrieben: Der Ort, an dem diese Zugriffsprüfung eingebaut wurde (also im PHP-Interpreter), ist eigentlich falsch, aber auf Webserver- oder Betriebssystemebene sieht's halt bei der Modullösung noch düsterer aus.

Wieso kann PHP im safe_mode eine Datei nicht lesen, die durch ein PHP-Skript des Nutzers erstellt wurde? (wieso das so ist ist klar, aber nicht warum das so implementiert wurde :))

Dazu muß das Skript die neue Datei, die ja in jedem Fall anfangs dem Apache-User gehört, an den Skripteigentümer verschenken. Ich bin nicht der Unix-Meister, aber zumindest auf Shell-Ebene ist so eine Verschenkungsaktion nur für einen möglich: root.
Wenn Du von einem normalen User-Account versuchst, ein chown durchzuführen, kriegst Du ein "operation not permitted" zurück.

Wenn Du aber den Apache nur wegen der PHP-Zugriffsrechte unter root laufen lässt, kommst Du vom Regen in die Traufe, weil damit andere, noch schlimmere Sicherheitslöcher geöffnet werden könnten.

Ich hoffe mal, diese Darstellung ist so richtig.

Ich habe safe_mode wieder abgeschaltet, und vertraue im Moment nur auf open_basedir. Das scheint auch zu genügen, zumindest um das Einlesen "fremder" Dateien zu unterbinden. Was allerdings bei system() usw. passieren kann, bzw. welchen Einfluss open_basedir darauf nimmt, habe ich nocht nicht herausbekommen.

open_basedir kann auf jeden Fall nicht verhindern, daß ein per system() aufgerufenes Programm beliebige Dateien öffnet - allerdings steht da ja dann wieder das Betriebssystem davor.

Allerdings kann zwar jetzt PHP die selbst erzeugten Dateien und Verzeichnisse lesen - ein User kann diese aber sicherlich nicht per FTP oder über ein CGI-Skript löschen. :(

Wenn das Verzeichnis vom User erstellt wurde, hat er sicher dort auch standardmäßig Schreibrechte und kann somit alle Dateien in "seinem" Verzeichnis löschen - egal wem sie gehören. Zumindest funktioniert's hier :)

Andere Möglichkeit wäre, PHP über CGI laufen zu lassen. Dann können alle PHP-Skripte unter dem Benutzer laufen, dem die Skripte gehören und dementsprechend werden Dateisystem-Zugriffsrechte auch sinnvoll beachtet.
Diese Lösung hat dann aber wieder andere Nachteile.

Darauf wollte ich eigentlich gerne verzichten, zumal CONFIXX afaik mod_php benötigt :) Kann man Module und Interpreter parallel bzw. <VirtualHost>-abhängig unter einem Apachen laufen lassen?

Da AddType auch in VirtualHost-Abschnitten einsetzbar ist, könnte das durchaus möglich sein. Ob das nun sinnvoll ist.. Ich hätte leichte Bauchschmerzen, wenn für jeden Zugriff der PHP-Interpreter neu geladen und gestartet wird - aber mein erster Rechner lief auch mit 8 MHz, hatte 512 KByte Speicher und weitere 512k kosteten über 500 Mark, sowas prägt Sparsamkeit :)

Gruß,
  soenk.e