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