ECS-Webhosting bietet Shared-Webhosting, Server, VServer unter Windows 2003, Windows 2008 und Linux, ueber 300 TLD Domains registrieren aus einer Hand sowie Microsoft Hosted Exchange 2003 Loesung KontaktKontakt
Deutschland: 0800 4 967 967 00
Ausland: +49 911 4 967 967 00

PHP safe_mode und open_basedir

Expand / Collapse
 
     

PHP safe_mode und open_basedir


Frage:
Ständig stolpern PHP Projekte über die Einstellungen safe_mode und open_basedir. Wozu sind die eigentlich in PHP gut bzw. was bewirken die?

Antwort:

open_basedir
Das open_basedir sorgt dafür, dass eine Webseite nur auf das eingestellte Verzeichnis open_basedir und dessen Unterverzeichnisse zugreifen kann. Bei Shared-Webhosting ist die Einstellung daher extrem wichtig und wird bei ECS-Webhosting keinesfalls abgeschaltet! Wichtig zu wissen ist, dass PHP auf Groß- und Kleinschreibung achtet. Ob bei Windows die Pfade mit \ oder \\ oder / geschrieben werden, sollte eigentlich kein Rolle spielen. 

Sollten Sie daher bei der Ausführung Ihrer Scripten eine open_basedir Fehlermeldung bekommen, dann überprüfen Sie die Pfadangaben sowie Groß- und Kleinschreibung für Ihre include-Dateien. Wir empfehlen unter Windows, die Pfade mit / zu schreiben.

Beispiel:
open_basedir=D:/web

Zugriff ist erlaubt auf D:/web, D:/web/domain, D:/web/domain/temp, ...
Zugriff ist verboten auf D:/, C:/Windows, ...

Besonderheiten:
Seit PHP 4.1.8 muss man unter Linux explizit das Upload-Verzeichnis zusätzlich in den open_basedir aufnehmen, auch wenn man meinen könnte, PHP könnte das mit den Angaben upload_tmp_dir und session.save_path vielleicht selber hinbekommen. Mehrere Verzeichnisse trennt man unter Windows mit ; und unter Linux mit |

Linux Beispiel:
open_basedir=/var/www/vhosts/DOMAIN/httpdocs|/tmp

Möchte man unabhängig von der php.ini einen Wert für das open_basedir einstellen, so muss man unter Windows in der Registry einen Wert hinzufügen:

Beispiel:
Das Kundenverzeichnis liegt unter:
D:\web\KUNDE\DOMAIN\htdocs

Registry:
Schlüssel anlegen:
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\Per Directory Values\D\web\KUNDE\DOMAIN\htdocs

String hinzufügen:
Name: open_basedir
Type: REG_SZ
Data: spezielles-open_basedir-Verzeichnis


safe_mode
Der safe_mode hat 2 Funktionen: Zum einen verweigert er die Ausführung von Shell-Kommandos (execute(), ...), zum anderen verweigert er den Zugriff auf Dateien, die dem aktuellen Benutzer der Webseite nicht gehören. 

Linux:
Standardmäßig läuft Apache als wwwrun, während der FTP-Zugang und PHP z.B. als Benutzer ftpbenutzer laufen. Lädt man jetzt mit PHP Dateien hoch oder holt sich diese mit curl, so gehören diese wwwrun. Somit kann PHP (ftpbenutzer) nicht auf seine Dateien mit Benutzer wwwrun zugreifen. Hier hilft nur safe_mode abschalten oder die Dateien per FTP hochladen. Mit einem Shellzugriff könnte man ebenfalls mit z.B. chown -R ftpbenutzer:psacln die Benutzerrechte korrigieren... was aber recht umständlich ist.

Unsere Meinung:
Mit einer ordentlich eingestellten Angabe open_basedir sollte der safe_mode eigentlich nicht mehr nötig sein. Ein Restrisiko bleibt wegen der Möglichkeit der Shell-Kommandos. Normal benötigen PHP Projekte keinen Shell-Zugriff (abgesehen von Typo3 mit ImageMagick :-( ), aber Hacker könnten nach wie vor ein schlecht programmiertes PHP-Script ausnutzen, um eigene PHP-Seiten hochzuladen, welche natürlich bösartigen Code enthalten können.

ECS-Webhosting schaltet daher den safe_mode nur im äußersten Notfall aus. Bei bekannten OpenSource Projekten wie Joomla wird der safe_mode garantiert nicht abgeschaltet! Joomla hat mit seinen 1001 Sicherheitslücken zuviel Potenzial für Hackangriffe. Eine Ausnahme machen wir bei Typo3. Ohne safe_mode=off läuft ImageMagick nicht und Extensions über die Weboberfläche machen nur Probleme. "Wir können bei Linux nicht auf die Typo3 Kundschaft, welche den Großteil stellt, verzichten."

Windows:
Unter Windows läuft PHP und der Webserver unter demselben Benutzer, insofern stellt sich die Problematik mit Dateien erst gar nicht. Wir haben die Erfahrung gemacht, dass die Shell-Kommandos unter Windows nicht (richtig) funktionieren. Insofern spielt es unter Windows eigentlich keinerlei Rolle, ob der safe_mode ein- oder ausgeschaltet ist. Standardmäßig ist der safe_mode aber auch hier eingeschaltet.


Deinen Kommentar hinzufügen


Name: *
Email Address:
Webseite:
Prüfcode:
*
 

Details
Zuletzt geändert:Freitag, 30. Januar 2009
Zuletzt geändert von: Administrator
Typ: INFO
Stufe: Intermediate
Rated 5 stars based on 1 vote.
Beitrag wurde 2.729* angeschaut.
Optionen

Benötigen Sie Hilfe?
 
------------------
------------------
 
 
------------------
------------------
  Folge uns:
 
Twitter Facebook

© 2001 by ECS-Webhosting Nürnberg