archilles scriptworld Forum

» Startseite
  » Support-Foren
      » Häufig gestellte Fragen (FAQ)
          · FAQ: Safe Mode und Open Basedir

Seite: 1

FAQ: Safe Mode und Open Basedir Archilles
Version 1 - 23. März 2005 14:50:00 CEST

Wenn eine PHP-Installation eine der beiden im Betreff genannten Optionen verwendet, kann es hier und da schonmal zu Kollisionen mit einzelnen Skripten kommen. Viele Hoster benutzen sie zwar nicht, aber einige eben doch. Auch Pakete zum Download für private Webserver, wie XAMPP.

Safe Mode

embedded image

Dazu gibt es eine gute Seite im PHP-Handbuch, was diesen Modus erläutert. Auch hier im Forum gibt es ein paar Sätze dazu. Meistens scheitert es daran, daß der PHP-Prozess eine Datei lesen oder schreiben soll, welche aber nicht ihm "gehört". Das passiert dann, wenn die zum Beispiel von dir per FTP mit Deinem Benutzerkonto hochgeladen wurde. Oder ein Skript nimmt eine vom Browser hochgeladene Datei entgegen, legt sie mit den Rechten des PHP-Prozesses temporär ab und darf sie dann nicht verarbeiten. Weil ja das ausführende Skript dir gehört.

PHP-Handbuch - "safe_mode"

Wenn du damit Probleme haben solltest, rate ich dir deinen Hoster zu fragen. Gegebenfalls kann er bei problemematischen Dateien den Eigentümer ändern. Bei eigenen Testservern, wenn du die Skripte nur lokal testen möchtest, kannst du auf diesen Modus verzichten. Es sei denn, du entwickelst eigene Skripte und schaust wie sie darauf reagieren ;-)

Open Basedir

embedded image

Mit dieser Option kann man die ausgeführten Skripte in eine Verzeichnis-Ebene "einsperren" (chroot). Es können dann keine Dateien außerhalb dieser angefordert oder geschrieben werden. Nach "unten" kann man jedoch immer. Im Grunde eine gute Idee, was auch bei manchen Hostern eingesetzt wird. Das machte jedoch zum Beispiel beim Talkboard Forum in alten Versionen wie 1.4 große Probleme. Es kann aber auch aktuelle Skripte treffen, die versuchen auf Systemresourcen zurückzugreifen. Wenn der Hoster das Verzeichnis auf "." setzt, sperrt er die Skripte in die aktuelle Ebene ein. Die Administration des TBF lag im Unterordner "admin" und durfte so, von dort ausgeführt, leider nicht auf die nötigen Bibliotheken eine Ebene höher zugreifen. Später lagen dann alle Dateien in einem Ordner, sodaß Sprünge in der Verzeichnistiefe nach "oben" nicht mehr nötig waren. Glücklicherweise wird diese Variable, wenn sie gesetzt wird, heute meistens auf dein Heimatverzeichnis eingestellt.

Hier bleibt bei Problemen nur der Ausweg die Skripte entsprechend umzuschreiben, daß sie die "basedir" beachten. Entweder machst du es bei geeigneten Kenntnissen selber oder bittest den Hersteller des Skriptes dies zu tun. In ganz harten Fällen, wenn weder Hoster noch Hersteller helfen möchten, bleibt nur der Umzug auf einen Server ohne diese Restriktionen.

Wie kann ich feststellen, ob ich eines davon habe?

Du kannst deinen Hoster/Admin fragen, warten bis ein Fehler auftritt oder PHP, sofern erlaubt, fragen. Erstelle dazu eine leere Datei und schreibe folgendes hinein:
PHP-Quelltext ('phpinfo.php'):
============================================================

<?php
phpinfo
();
?>

Das ganze speicherst du unter einem netten Namen, kopierst es auf den Server und lädst die Seite im Browser, z.B. "http://www.deinedomain.de/phpinfo.php". Du solltest eine sehr lange Liste mit PHP-Infos sehen. Am Anfang stehen in der Regel die Versionsangaben und weitere Infos zum System. Es folgt eine längere Tabelle mit der "PHP Configuration". Schaue nach den Einträgen "safe_mode" und "open_basedir". Wichtig ist der Eintrag "local value", denn der gilt im aktuellen Verzeichnis. Bei safe_mode steht entweder on oder off und bei der basedir wird entweder ein Pfad angegeben oder das Feld ist leer.

embedded image

Dieses Bild soll nicht implizieren, daß beides zu deaktivieren das einzig Wahre ist! Es ist nur ein Beispiel meiner Konfiguration, die ich aktuell nutze :-)

Seite: 1

Copyright (c) by "archilles scriptworld Forum", 2009. All rights reserved.
This archive has no free license, but any copyright laws applicable by your local country.