Ausführung von Skripten beschränken

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Ausführung von Skripten beschränken

Postby Brainscanner » 18. April 2004 11:32

Hallo,

ich habe hier einen Windows 2000 Server mit PHP 4.3.2 laufen. Der funktioniert an sich auch sehr gut. Ich biete ein paar Leuten Webspace an, in diesen Verzeichnissen ist ja auch php verfügbar. Allerdings sollen Skripts aus diesen Verzeichnissen nur beschränkt lauffähig sein. Zum Beispiel dürfen sich Skripts nicht auf Dateien außerhalb dieses Unterverzeichnisses auswirken. Zum Beispiel darf man keine Dateien außerhalb des Verzeichnisses lesen oder gar löschen dürfen. Fällt dazu jemandem eine Idee ein?

Jemand hat mir von einem safe mode (http://www.php.net/features.safe-mode) erzählt, der verwendet werden kann, wenn PHP als cgi ausgeführt wird. Leider weiß ich nicht, wie es bei Xampp geladen wird. Läßt sich das vielleicht auch irgendwie mit htaccess Dateien regeln, daß die Skripts beschränkt werden oder so? Bin für jede Hilfe dankbar.
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Brainscanner » 18. April 2004 12:06

Ich habe jetzt mal den Safe Mode in der php.ini aktiviert. Leider beschränkt es den Zugriff aber noch nicht. Ich kann aber leider überhaupt nicht sagen, an was es liegt. Vielleicht ist schon Folgendes die Ursache:
Ich habe ein Hauptwebverzeichnis, in dem alles erlaubt sein muß. Darin befindet sich ein Unterverzeichnis, das eingeschränkt laufen soll. Vielleicht hebt die Erlaubnis das Verbot auf?!
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 18. April 2004 12:18

safe_mode bietet sich auch an wenn PHP als Modul geladen wird. "Probleme" kann es in dieser Kombination im Zusammenhang mit User-Verzeichnissen nur kommen wenn es auf Linux läuft. Ist jedenfalls eine gute Idee das zu aktivieren.

Was du noch brauchst, ist ein Directory-Abschnitt in der httpd.conf für jedes Benutzer-Unterverzeichnis. Und in den Abschnitten muß dann folgendes rein:
php_admin_value open_basedir %Verzeichnis vom Directory-Abschnitt%
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 20. April 2004 00:49

Kannst Du mir das vielleicht noch ein bißchen näher erklären? Wie sieht so ein Directory Abschnitt aus?
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 24. April 2004 11:23

Ich gehe jetzt mal von folgenden Verzeichnissen aus:

Hauptwebverzeichnis = C:\xampp\htdocs
VerzeichnisBenutzer1 = C:\xampp\htdocs\user1
VerzeichnisBenutzer2 = C:\xampp\htdocs\user2

Code: Select all
<Directory "C:/xampp/htdocs/user1">
   Order Allow,Deny
   Allow from all

   Options None
   AllowOverride AuthConfig FileInfo

   php_admin_flag safe_mode On
   php_admin_value open_basedir "C:/xampp/htdocs/user1"
</Directory>

<Directory "C:/xampp/htdocs/user2">
   Order Allow,Deny
   Allow from all

   Options None
   AllowOverride AuthConfig FileInfo

   php_admin_flag safe_mode On
   php_admin_value open_basedir "C:/xampp/htdocs/user2"
</Directory>


Für das Hauptwebverzeichnis ("C:\xampp\htdocs") müssen wir nichts eintragen, weil da die Vorgabewerte aus der php.ini genommen werden.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 24. April 2004 23:01

Hey, das funktioniert! Klasse! Danke!!!
Ich hab grad noch den Pfad ein klein wenig angepaßt. Eine Frage hätte ich nun aber noch. Ich hab noch den folgenden Kram in der Php.ini stehen. Muß ich daran noch was ändern? (Ohne den Directory Eintrag in der conf vom Apache hat es nicht funktioniert):

Code: Select all
;
; Safe Mode
;
safe_mode = On

; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
safe_mode_gid = Off

; When safe_mode is on, UID/GID checks are bypassed when
; including files from this directory and its subdirectories.
; (directory must also be in include_path or full path must
; be used when including)
safe_mode_include_dir = C:/Programme/xampp/htdocs/User/

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir = C:/Programme/xampp/htdocs/
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Brainscanner » 15. May 2004 23:35

Hey, das geht leider doch noch nicht so ganz wie ich mir das dachte. Ich hab seither kaum das Forum benutzt, das offenbar mit dem Safe_Mode in Konflikt gerät.
Die Struktur sieht bei mir so aus, daß ich ein Grundverzeichnis habe. In diesem ist ein Unterordner "User". Dort soll alles beschränkt ablaufen. Aber ansonsten soll das Grundverzeichnis und alle anderen Unterordner von diesem uneingeschränkt funktionieren.
Hier nochmal die Konfigurationen:

php.ini

; Safe Mode
;
safe_mode = On

; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
safe_mode_gid = Off

; When safe_mode is on, UID/GID checks are bypassed when
; including files from this directory and its subdirectories.
; (directory must also be in include_path or full path must
; be used when including)
safe_mode_include_dir = C:/Programme/xampp/htdocs/User/

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir = C:/Programme/xampp/htdocs/

; Setting certain environment variables may be a potential security breach.
; This directive contains a comma-delimited list of prefixes. In Safe Mode,
; the user may only alter environment variables whose names begin with the
; prefixes supplied here. By default, users will only be able to set
; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
;
; Note: If this directive is empty, PHP will let the user modify ANY
; environment variable!
safe_mode_allowed_env_vars = PHP_

; This directive contains a comma-delimited list of environment variables that
; the end user won't be able to change using putenv(). These variables will be
; protected even if safe_mode_allowed_env_vars is set to allow to change them.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; 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.
;open_basedir =

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =



httpd.conf
<Directory "C:/Programme/xampp/htdocs/User/">
Order Allow,Deny
Allow from all

Options None
AllowOverride AuthConfig FileInfo

php_admin_flag safe_mode On
php_admin_value open_basedir "C:/Programme/xampp/htdocs/User/"
</Directory>


Wäre schön, wenn Du mir nochmal helfen könntest...
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 15. May 2004 23:53

Die Struktur sieht bei mir so aus, daß ich ein Grundverzeichnis habe. In diesem ist ein Unterordner "User". Dort soll alles beschränkt ablaufen. Aber ansonsten soll das Grundverzeichnis und alle anderen Unterordner von diesem uneingeschränkt funktionieren.

Dann beschränke in der php.ini gar nichts. Das ist dann erst mal für alle gültig. Dein Grundverzeichnis (C:/Programme/xampp/htdocs") und alle Unterordner von dem Grundverzeichnis und über Alias eingebundene Verzeichnisse. z.B. phpMyAdmin ("C:/Programme/xampp/phpmyadmin"):
;open_basedir =
safe_mode = Off
safe_mode_exec_dir =
safe_mode_include_dir = "C:/Programme/xampp/php/pear"
include_path = ".;C:/Programme/xampp/php/pear"

In der httpd.conf beschrängst du dann nur den Unterordner "User":
<Directory "C:/Programme/xampp/htdocs/User">
Order Allow,Deny
Allow from all

Options None
AllowOverride AuthConfig FileInfo

php_admin_flag safe_mode On
php_admin_value open_basedir "C:/Programme/xampp/htdocs/User"
</Directory>

Diese Einschränkungen (php_admin_flag/php_admin_value) sind dann nur für das Userverzeichnis ("C:/Programme/xampp/htdocs/User") und seine Unterordner gültig.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. May 2004 00:35

Herrlich. Läuft nun alles, alle guten Skripts funktionieren. Vielen vielen Dank!
Bedeutet der Safe Mode nun eigentlich, daß ein Skript zumindest Dateien löschen oder bearbeiten kann, die sich im selben Verzeichnis wie es selbst befinden? Oder hat er überhaupt keine derartigen Rechte mehr?
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 16. May 2004 00:47

Läßt sich so einheitlich nicht beantworten.

Unter Windows/Linux sind bestimmte Funktionen gesperrt durch Safe_Mode. Unter Linux wird noch zusätzlich geprüft, ob die UserID vom Script zur UserID von der Datei passt die das Script bearbeiten will. Du kannst aber unter allen OS noch zusätzlich weitere Funktionen sperren.

Die Beschränkung von Scripten auf ein bestimmtes Verzeichnis kommt vom open_basedir und ist unabhängig vom Safe_Mode.

Ansonsten mal folgendes Anschauen:
http://de.php.net/manual/de/features.safe-mode.php
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. May 2004 11:55

Schau ich mir an, danke.

Aber leider funktioniert es immer noch nicht. Ich habe mich exakt an das gehalten, was Du gepostet hast. Aber ich kriege immer noch Fehlermeldungen. Zuerst hatte ich wirklich angenommen, daß es geht, aber wenn ich zum Beispiel mein Forum aufrufen will (http://brainscanner.dyndns.org/php/phpbb2):
Code: Select all
Warning: Unknown(): open_basedir restriction in effect. File(C:\Programme\xampp\htdocs\Php\phpbb2\index.php) is not within the allowed path(s): (C:/Programme/xampp/htdocs/User/) in Unknown on line 0

Warning: Unknown(C:\Programme\xampp\htdocs\Php\phpbb2\index.php): failed to open stream: Operation not permitted in Unknown on line 0

Warning: (null)(): Failed opening 'C:\Programme\xampp\htdocs\Php\phpbb2\index.php' for inclusion (include_path='.;C:\Programme\xampp\php\pear\') in Unknown on line 0


Die kommen mehr oder weniger unregelmäßig. Wenn ich die Seite ein zweites Mal lade, klappt es meistens. Vor Allem sind sie in meinen Augen widersprüchlich. Wenn /User eingeschränkt ist, wieso wird dann /php eingeschränkt? Wenn Du willst, schick ich Dir gerne meine Konfigurationsdateien.
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 16. May 2004 12:33

Vielleicht ist ja noch irgendwas im Cache von deinem Browser.
(von der Zeit wo noch alles eingeschränkt war)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. May 2004 12:55

Hm, okay. Seit der Löschung keine Probleme mehr. Testweise hatte ich vor dem Leeren die Seite auch mal mit nem anderen Browser angeschaut. Aber bisher war ich eigentlich immer der Auffassung treu, daß bei von php erzeugten Seiten immer die aktuelle Version genommen würde. Nicht, daß der Browser grundsätzlich in der Lage wäre, das herauszufinden (wenn man von den Dateiendungen absieht), aber irgendwie hat er bei mir immer von vornherein die neue Version genommen, auch wenn nur ganz grundsätzliche Änderungen vorgenommen worden waren.
Mal schauen wie sich das nun entwickelt. Danke für den Tip!
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Postby Wiedmann » 16. May 2004 13:20

Aber bisher war ich eigentlich immer der Auffassung treu, daß bei von php erzeugten Seiten immer die aktuelle Version genommen würde. Nicht, daß der Browser grundsätzlich in der Lage wäre, das herauszufinden (wenn man von den Dateiendungen absieht)


Standardmäßig schickt ein PHP-Script keinen Last-Modified Header mit. Also kann der Browser nur von der URI/dem Dateinamen ausgehen und entscheidet dann anhand deiner Browserkonfiguration.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Brainscanner » 16. May 2004 19:31

Also ich verzweifle so langsam. Vorhin hab ich auf einem ganz anderen Rechner auf mein Forum zugreifen wollen, als ich diese tolle Fehlermeldung bekommen habe. Scheinbar scheint an der Konfiguration immer noch was nicht zu stimmen. Hast Du noch Ideen?
Brainscanner
 
Posts: 45
Joined: 07. March 2004 23:42
Location: Baden-Württemberg

Next

Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 44 guests