PHP - Verzeichniszugriff einschränken

zinion

Erfahrenes Mitglied
Hallo Leute!

Ich betreibe einen Apache 1.3 Webserver unter Windows, unter anderem mit PHP-Modul.

Es sind mehrere virtuelle Hosts für verschiedene Domains eingerichtet. Jetzt habe ich folgendes Problem:
Wenn jemand ein PHP-Skript schreibt, kann er damit ja auf die ganze HDD zugreifen. Kann ich das irgendwie so konfigurieren, daß PHP-Scripts nur innerhalb des Document Root (und untergeordnetten Verzeichnissen) des jeweiligen Virtual Host ausführbar sind?

mfG

zinion
 
man chroot?

Also ich kenne den man-Befehl und ich liebe ihn, leider gibt es den nur unter Linux genau wie chroot. Ich betreibe den Server allerdings unter Windows, wie ich oben ja schon geschrieben habe.

Ausserdem will ich ja nicht den Verzeichniszugriff für den Web / PHP-Server im allgemeinen einschränken sondern ich will ihn spezifisch für die einzelnen Virtual Hosts die ich im Apache habe einschränken.
Bei einer standardmäßigen PHP-Installation ist es doch möglich, daß ein User des Webservers auf Dokumente zugreift, die ausserhalb seines Document Root liegen (indem er ein PHP-Script schreibt und darin einfach D:\ oder sonstwas verwendert). Das soll aber nicht möglich sein. Oder lässt der Apache das gar nicht zu?

edit:
Habs getestet, man kann mit PHP-Skripten auf die ganze Platte zugreifen, auch ausserhalb des Document Root eines Virtual Hosts. Das möchte ich gerne unterbinden.

edit 2:
Ich habe eine Lösung gefunden. Ich veröffentliche sie mal hier, falls jemand dasselbe Problem hat - gilt unter Linux gleichermaßen wie unter Win:
There is a better solution than starting every virtual host in a seperate instance, which is wasting ressources.

You can set open_basedir dynamically for every virtual host you have, so every PHP script on a virtual host is jailed to its document root.

Example:
<VirtualHost http://www.example.com>
ServerName http://www.example.com
DocumentRoot /www-home/example.com
[...]
<Location />
php_admin_value open_basedir \ "/www-home/example.com/:/usr/lib/php/"
</Location>
</VirtualHost>

If you set safe_mode on, then the script can only use binaries in given directories (make a special dir only with the binaries your customers may use).

Now no user of a virtual host can read/write/modify the data of another user on your machine.
Für alle die des Englischen nicht mächtig sind eine Kurzbeschreibung:

PHP muss im safe-mode laufen und den VirtualHosts die eingeschränkt werden sollen muss die php_admin_value open_basedir Direktive vergeben werden, so wie im Example oben.

mfG

zinion
 
Zuletzt bearbeitet:
Original geschrieben von zinion
man chroot?

Also ich kenne den man-Befehl und ich liebe ihn, leider gibt es den nur unter Linux genau wie chroot. Ich betreibe den Server allerdings unter Windows, wie ich oben ja schon geschrieben habe.

Oh habe nur PHP - Apache gelesen und bin von Unix ausgegangen.
Ich hoffe für dich das du den Apache auf Windows nicht als Produktivumgebung betreibst.

grüsse
 

Neue Beiträge

Zurück