Mailinglisten-Archive |
Jan Kocovski wrote: > > Hi, > es koennte sein das save mode an ist. > a.) wie pruefe ich das? mit einem script wie <? phpinfo(); ?> > b.) wie schalte ich ihn aus in der php3.ini: safe_mode = On | Off in der apache-conf: php3_safe_mode = On | Off nicht jedoch in einer .htaccess-datei und ebenfalls nicht per php-script, da diese moeglichkeiten den sinn des safe-mode ad absurdum fuehren wuerden. > c.) was bewirkt er ueberhaupt dazu eine antwort von kristian: --- beisskante --- Zu safe_mode gibt es keine aktuelle Dokumentation ausser dem Source. Der sagt: Es gibt eine Konfigurationsvariable safe_mode in PHP3, die durch die gleichnamige Anweisung in der php3.ini gesetzt werden kann ("safe_mode = On" bzw. "php3_safe_mode On"). Weiterhin gibt es eine Konfigurationsvariable "safe_mode_exec_dir" bzw. "php3_safe_mode_exec_dir" fuer die Modulversion von PHP3. Und schliesslich gibt es noch "sql_safe_mode"... Wenn safe_mode aktiv ist, sind verschiedene PHP3-Funktionen privilegiert oder eingeschraenkt: - Dateifunktionen koennen nur noch mit lokalen Dateien arbeiten, die denselben Eigentuemer (uid) haben wie der Eigentuemer des Scriptes. - Auch ftp-Pfadnamen werden so geprueft. - Auf zlib-Pfadnamen werden so geprueft. - mkdir() und posix_mkfifo() sind nur in Verzeichnissen zugelassen, die dem Eigentuemer des Scriptes gehoeren. - Das Ziel eines symlink() (Parameter 1 von symlink()) muss dem Eigentuemer des Scriptes gehoeren. - Das Ziel eines link() (Parameter 1 von link()) muss dem Eigentuemer des Scriptes gehoeren. - Die zu unlink()ende Datei muss dem Eigentuemer... - Eine zu chgrp()ende Datei muss dem Eigentuemer... - Eine zu chown()ende Datei muss dem Eigentuemer... - Eine zu chmod()ende Datei muss dem Eigentuemer... - Eine zu touch()ende Datei muss dem Eigentuemer... - Ein zu rmdir()endes Verzeichniss muss dem Eigentuemer... - In rename() muss die umzubenennende Datei dem Eigentuemer... - In copy() muss die Quelldatei dem Eigentuemer... - Lokalen, absoluten Pfadnamen wird document_root vorangestellt. - In den Funktionen popen(), system() und exec() koennen nur Kommandos ausgefuehrt werden, die im safe_mode_exec_dir stehen. Auf die ausgefuehrten Kommandos wird von den Funktionen system() und exec() automatisch EscapeShellCmd() angewendet (nicht so von popen() -> Luecke! -> Patch!). [ dieser hier angesprochene patch ist in der version 3.0.14 verarbeitet worden, daher haenge ich diesen nicht hier an ] - Dynamisch ladbare Erweiterungen (dl()-Funktion) stehen in safe_mode nicht zur Verfuegung ("Dynamically loaded extensions aren't allowed when running in SAFE MODE."). - Es kann kein neues CPU-Zeitlimit festgelegt werden ("Cannot set time limit in safe mode"). - Wird mod_php verwendet, steht in der Funktion GetAllHeaders() der Wert des Headers "Authorization" (Loginname und Passwort) nicht zur Verfuegung. - Die Funktion Header() wird dem Header "WWW-authenticate" immer den Eigentuemer des Scriptes als Bestandteil des Reals hinzufuegen. - Das filepro Map-File "<dir>/map" (wobei <dir> der Parameter der filepro()-Funktionen ist) muss dem Eigentuemer... Dies gilt fuer filepro(), filepro_rowcount() und filepro_retrieve(). - Das dbase-Modul verlangt in dbase_open(), dass die dbf-Datei dem Eigentuemer... dbase_create() setzt voraus, dass das Verzeichnis, in dem die Datei angelegt wird, dem Eigentuemer... - Das DBM-Modul setzt voraus, dass in dbmopen() das Verzeichnis, in dem die DBM-Datenbank angelegt wird, dem Eigentuemer... Dies ist auf den ersten Blick nicht der Fall, wenn stattdessen DBA verwendet wird. Jemand sollte das pruefen... Wenn sql_safe_mode aktiv ist, koennen bei einem MySQL-Connect host, user und password nicht angegeben werden ("SQL safe mode in effect - ignoring host/user/password information"). >und was macht die cgi-version _noch_ sicherer? Man kann die CGI-Version in einem chroot()-Environment verwenden und mit setrlimit() noch weitergehende Einschraenkungen definieren. Dies ist vergleichsweise sicher gegen Fehler wie den o.a. popen()-Bug. --- beisskante --- ich hoffe, damit kommst du weiter. gruss, markus
php::bar PHP Wiki - Listenarchive