Zur Navigation

relative Pfadangabe

1 christa

Hallo

möchte gerne per php-Script Bilder auf web2 uploaden. Das upload-Script liegt aber auf var/kunden/webs/web1/html/viren, also auf web1 des gleichen Servers.

absolute Pfade:
Scriptverzeichnis: var/kunden/webs/web1/html/viren
Bilderverzeichnis: var/kunden/webs/web2/html/container/pics/ob/small

Upload-Script mit relativem Pfad:

imagejpeg($neuesbildTN,"../../../web2/html/container/pics/ob/small/small_".$bild,50);

Fehlermeldung:
warning...open_basedir restriction in effect. File ../../../web2html/container/pics/ob/small/small_123_342.jpg is not 
within the allowed path(s)......

Wenn das Zielverzeichnis auf dem gleichen Web-Verzeichnis liegt wie das Uploadscript, dann funktioniert alles perfekt.

Ich vermute, dass ich nicht Web-Space übergreifend handeln kann, ohne dies ausdrücklich zu erlauben. Aber wie und wo erlaubt man das in Debian?

Danke im voraus





26.04.2013 15:01

2 Jörg Kruse

warning...open_basedir restriction in effect

Die Variable open_basedir wird in der php.ini gesetzt.

Den Pfad der php.ini Datei(en) kannst du über phpinfo herausbekommen. In Debian befindet sich die php.ini meist in /etc/php5/apache2 sowie weitere ini Dateien unterhalb von /etc/php5/apache2/conf.d

26.04.2013 15:31

3 christa

Hallo Jörg

erkennst Du anhand meiner Pfade, was ich unter "open_basedir =" definieren muss, damit ich über alle WebX -Verzeichnisse hinweg arbeiten kann? Offenbar ist der Befehl nicht aktiv, aber immerhin kann ich im selben Verzeichnis alles ausführen, nur nicht über das hinaus. Was bedeutet es, wenn nichts definiert ist?

php.ini sieht wie folgt aus:

; open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.

; NOTE: this is considered a "broken" security measure.
; Applications relying on this feature will not recieve full
; support by the security team. For more information please
; see /usr/share/doc/php5-common/README.Debian.security
;

;open_basedir =


der safe_mode ist auf off gesetzt

26.04.2013 21:45

4 Jörg Kruse

Wenn nichts definiert ist, gibt es keine Einschränkungen. Vielleicht wurde open_basedir in einer nachgeordneten ini Datei gesetzt

Was gibt denn phpinfo() in der Zeile open_basedir aus (in den Spalten "Local Value" und "Master Value")? ich würde phpinfo() hierbei im selben Verzeichnis ausführen, in welchem sich as Upload-Script befindet

In der Zeile "Additional .ini files parsed" werden zudem alle ini Dateien gelistet, die phpinfo() gefunden hat und die Berücksichtigung finden können

26.04.2013 21:55

5 christa

hallo Jörg

ich kann nichts erkennen, wo "open_basedir=" definiert wird.

Was gibt denn phpinfo() in der Zeile open_basedir aus (in den Spalten "Local Value" und "Master Value")?

Configuration File (php.ini) Path /etc/php5/apache2
Loaded Configuration File /etc/php5/apache2/php.ini

open_basedir
Local Value: /var/kunden/webs/web1/html/:/tmp/
Master Value: no value

In der Zeile "Additional .ini files parsed" werden zudem alle ini Dateien gelistet, die phpinfo() gefunden hat und die Berücksichtigung finden können

hier alle angezeigten .ini files mit den entsprechenden Definitionen:

additional .ini files parsed
/etc/php5/apache2/conf.d/gd.ini, -> extension=gd.so
/etc/php5/apache2/conf.d/imap.ini, -> extension=imap.so
/etc/php5/apache2/conf.d/mysql.ini, -> extension=mysql.so
/etc/php5/apache2/conf.d/mysqli.ini, -> extension=mysqli.so
/etc/php5/apache2/conf.d/pdo.ini, -> extension=pdo.so
/etc/php5/apache2/conf.d/pdo_mysql.ini, -> extension=pdo_mysql.so
/etc/php5/apache2/conf.d/suhosin.ini -> extension=pdo.suhosin.so

ich würde phpinfo() hierbei im selben Verzeichnis ausführen, in welchem sich as Upload-Script befindet

habe ich gemacht, aber warum ist das wichtig?

wo soll ich da noch suchen, irgendwo muss die Einschränkung doch definiert sein. Innerhalb eines Webspaces (web1....webX) kann ich alles machen, aber nicht von Webspace zu Webspace, also zB. von web1 nach web2.


27.04.2013 07:57

6 Jörg Kruse

Local Value: /var/kunden/webs/web1/html/:/tmp/

Wenn PHP als Modul läuft, kann der Wert per php_admin_value auch in einer Konfigurationsdatei des Webservers gesetzt werden. Ich würde in der Konfigurationsdatei des betreffenden VirtualHosts (in /etc/apache2/sites-available) schauen. Dort könnte dann so etwas stehen:

php_admin_value open_basedir /var/kunden/webs/web1/html/:/tmp/

Das ließe sich dann ja entsprechend erweitern:

php_admin_value open_basedir /var/kunden/webs/web1/html/:/tmp/:/var/kunden/webs/web2/html/container/pics/ob/small

... wobei der Webserver hiernach neu geladen werden muss

Falls der Parameter auch dort nicht gefunden wird, würde ich in der Konsole (ssh) mal das Verzeichnis /etc durchsuchen:

cd /etc
grep -r open_basedir *

27.04.2013 08:33 | geändert: 27.04.2013 08:36

7 christa

hab's gefunden...
Da der Server via sysCP konfiguriert wird, liegt die gesuchte Datei im Verzeichnis /etc/apache2/sites-available als 99_syscp_vhosts.conf. Dort ist jeder Virtualhost wie folgt definiert:

DocumentRoot "/var/kunden/webs/web1/html/"
php_admin_value open_basedir "/var/kunden/webs/web1/html/:/tmp/"
php_admin_flag safe_mode On

DocumentRoot "/var/kunden/webs/web2/html/"
php_admin_value open_basedir "/var/kunden/webs/web2/html/:/tmp/"
php_admin_flag safe_mode On

....etc

ändern kann ich diese Pfade nicht, denn bei der nächsten Domainkonfiguration würden sie wieder überschrieben, Was ich in SysCP aber einstellen kann, ist ob ich eine open_basedir haben will oder nicht. Genau so kann man auch den safemode ein/ausschalten.

Dazu meine Fragen: wenn auf dem Server keine anderen Kunden sind, sollte das Ausschalten der open_basedir doch keine Probleme verursachen?
Den Safemode lasse ich unverändert auf ON

28.04.2013 08:12 | geändert: 28.04.2013 08:14

8 Jörg Kruse

Ab PHP 5.3 kann open_basedir auch mittels ini_set() (in verengender Weise) geändert werden:

Seit PHP 5.3.0 kann open_basedir zur Laufzeit weiter verengt werden. Das heißt, wenn open_basedir laut php.ini auf /www/ gesetzt ist, kann die Direktive zur Laufzeit mit ini_set() auf beispielsweise /www/tmp/ weiter begrenzt werden.

http://www.php.net/manual/en/ini.core.php#ini.open-basedir

open_basedir wird wohl in erster Linie dazu eingesetzt, Kundenverzeichnisse voreinander zu sichern. Darüberhinaus könnte es vielleicht einen Exploit einer Sicherheirtslücke in seiner Wirkung begrenzen. 100%ige Sicherheit bieten aber weder open_basedir noch safemode:

For Local exploits we mostly hear about open_basedir or safemode problems on shared virtual hosts. These two features are there as a convenience to system administrators and should in no way be thought of as a complete security framework. With all the 3rd-party libraries you can hook into PHP and all the creative ways you can trick these libraries into accessing files, it is impossible to guarantee security with these directives.

http://www.php.net/security-note.php

28.04.2013 09:47 | geändert: 28.04.2013 09:48

9 christa

tja soll man oder soll man nicht...

danke Dir Jörg, war wie immer speditiv und lehrreich

28.04.2013 14:59

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]