Apache2/vHosts: Zugriff nur auf jeweil. DocumentRoot beschränken?

DelphiKing

King with a crown
ID: 46719
L
20 April 2006
6.554
729
Aloha,

ich habe ein Debian5-System und dort mit Apache und modPHP diverse Webseiten auf vhosts verteilt, die alle in Verzeichnissen dieser Art liegen:
  • /var/www/domain1.de/
  • /var/www/domain2.org/
Die Dateien in den Verzeichnissen gehören jeweils einem eigenen User/Group.

Entsprechend den Verzeichnissen habe ich jeweils eine vhost-Config für Apache in der Art:
Code:
<VirtualHost *:80>
    DocumentRoot /var/www/domain1.de
    […]
</VirtualHost>

Allerdings musste ich jetzt mit Schrecken feststellen, dass man zum Beispiel mit PHP und fopen() problemlos auf die Verzeichnisse anderer User zugreifen kann.
Also z.B. in /var/www/domain1.de/test.php mit fopen("/var/www/domain2.org/geheim.txt", "r") den Inhalt der fremden Datei auslesen.
Ignoriert der Apache/PHP da das DocumentRoot völlig und gestattet auf alles Zugriff, auf das er eben zugreifen kann (was ja logischerweise alle Webseiten sind)?
Warum! Und was tun!


Grüßle, flo
 
Mit der Option "open_basedir" kannst du den Zugriff von PHP auf beliebige Verzeichnisse beschränken:

php.net schrieb:
Wenn ein Skript versucht, eine Datei zu öffnen, zum Beispiel mit fopen() oder gzopen(), wird der Ort der Datei geprüft. Wenn die Datei nicht im Verzeichnisbaum, der in open_basedir angegeben ist, liegt, wird PHP die Datei nicht öffnen.

Quelle + weitere Infos: https://php.net/manual/de/ini.core.php
 
Das höre/lese ich heut' allerdings zum ersten Mal, was mich ziemlich wundert, da ich täglich mit diesen Themen zu tun habe.

Hast du irgendeine Quelle für mich, bei der ich das nachlesen kann?

Danke + Gruß

dahippi
 
Das Problem ist, dass mit mod_php alles über den Apache-User läuft und der Apache auf alles Zugriff haben muss. Man kann über den Apache somit auch auf alle anderen Dateien zugreifen, auf die der Apache Zugriff hat.
Als Abhilfe kann man PHP als CGI installieren, da dann alles als der entsprechende Benutzer ausgeführt wird und die Berechtigungen somit beachtet werden.
Eine andere Alternative wäre die Verwendung eines entsprechenden PHP-Addons, da bin ich aber auch nicht ganz auf dem Dampfer, wie es da aussieht. Es gibt da mods wie suphp-, suExec, Hardened PHP, suhosin und bestimmt noch weitere. Welche jetzt genau das bieten, was du benötigst, weiß ich nicht genau.

Das hier habe ich nach kurzem Googlen gefunden. Sieht ganz interessant aus: Klick