Page 1 of 1

open_basedir Verständnisfrage

Posted: 2007-04-22 14:01
by hotzi
Hallo,

wenn ich hier:

http://www.php.net/manual/en/features.s ... en-basedir

richtig lese, sollte es da ja so sein, dass ein script, welche zum Beispiel ein exec ausführen mag, sich das Ziel des exec im OpenBaseDir befinden muss.

Beispiel:

Code: Select all

open_basedir	/var/www/web63/html/
PHP-Script:

Code: Select all

 $var2 = shell_exec ('cat /etc/passwd');
 echo $var2;
Dieses exec wird bei mir ausgeführt, dabei liegt cat nicht im open_basedir.

Die Hilfe schreibt:
Limit the files that can be opened by PHP to the specified directory-tree, including the file itself. This directive is NOT affected by whether Safe Mode is turned On or Off.
When a script tries to open a file with, for example, fopen() or gzopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink.
Ich verstehe wohl was falsch? Und wie kann ich das Ausführen solcher Files auf einen bestimmten Files verhindern?

Das Komische: Gallery sagt, es könne Dinge wie "convert" nicht finden, wenn das base_dir nicht stimmt.

PS: Dieser Test wurde mit safe_mode off gemacht, daher kann ich exec_dir nicht setzen.

Danke und Gruß

Andre

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 14:57
by dtdesign
Ist doch klar warum das geht. Verbiete doch via disabled_functions in der php.ini die exec Befehle, da diese für gewöhnlich böse sind ;)

PHP kann nicht überprüfen, ob ein Pfad innerhalb eines exec erlaubt ist, da du hierbei auf die Shell zugreifst.

Gruß
dtdesign

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 14:57
by Roger Wilco
Hotzi wrote:

Code: Select all

 $var2 = shell_exec ('cat /etc/passwd');
 echo $var2;
Dieses exec wird bei mir ausgeführt, dabei liegt cat nicht im open_basedir.
PHP öffnet die Datei nicht selbst. Daher geht es auch, wenn das Binary nicht in einem Verzeichnis liegt, das in open_basedir nicht aufgelistet ist. Die open_basedir Restriktionen greifen nur bei Funktionen, in welchen der PHP-Interpreter selbst die Datei öffnen muss (fopen, file etc.).
Hotzi wrote:Ich verstehe wohl was falsch? Und wie kann ich das Ausführen solcher Files auf einen bestimmten Files verhindern?
safe_mode_exec_dir oder mit einer entsprechenden Webserverkonfiguration (SuExec, CGIWrap, SuPHP) und dem Standard Permissionsystem von Linux.
Hotzi wrote:Das Komische: Gallery sagt, es könne Dinge wie "convert" nicht finden, wenn das base_dir nicht stimmt.
Gallery und ähnliche Skripte überprüfen, ob fopen() auf das Binary einen Fehler liefert. Da fopen von den open_basedir Restrictions betroffen ist, liefert das natürlich einen Fehler, obwohl die Datei ausgeführt werden könnte.

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 15:10
by hotzi
Ich teste auf suphp, aber ls, cat und so kann ka normal jeder aufrufen.

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 15:13
by Roger Wilco
Hotzi wrote:Ich teste auf suphp, aber ls, cat und so kann ka normal jeder aufrufen.
Das kannst du mit chown/chmod ändern.

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 15:28
by hotzi
Schon klar, aber ich such immer zuerst den Weg, den man am einfachsten gehen kann.

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 15:44
by dtdesign
Und der lautet:

exec/shell_exec in der php.ini verbieten. Schauen ob alle Skripte funktionieren und wenn ja, glücklich sein ;)

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 15:47
by hotzi
Gallery geht dann nicht, imagemagick usw...

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 20:57
by rootsvr
Gllery funktioniert wunderbar mit der eingebauten Lib GD

Re: open_basedir Verständnisfrage

Posted: 2007-04-22 21:06
by hotzi
Gallery2 vielleicht, G1 kann kein GD, zum Glück übrigens, denn GD ist lahm und qualitativ...

Re: open_basedir Verständnisfrage

Posted: 2007-04-23 10:07
by duergner
Dann musst du wohl mit dem leider auch nicht viel sicheren safe_mode und entsprechend gesetztem safe_mode_exec_dir arbeiten. PHP ist halt leider aus Sicht der Sicherheit ein Horror.