Moin!
Im vorliegenden Fall wurde nach dem Erstellen des Verzeichnisses mit chmod() cie Berechtigung auf 0700 gesetzt. Das ist natürlich falsch, weil es kein Standard ist
Moment mal, das geht mir jetzt nicht ein.
Ich unterscheide zwei Fälle:
a) Eigener Server (Blech oder virtuell):
Der Webserver läuft mit den Rechten eines speziellen Benutzers (www-run || www-data). Der Webserver legt den Ordner an und in dem sollen die Session-dateien abgelegt werden. Ich sehe offen gestanden keinen Grund, warum ein anderer Benutzer - bestenfalls könnte ich mir vorstellen noch die Gruppe (www-run || www-data) - mit einzubeziehen, an dem Verzeichnis Rechte haben soll. Das damit nicht der root ran muss, wenn da mal manuell eingeriffen werden soll (z.B. um durch das Löschen der Dateien alle Sessions zu Canceln) Hab so schon genug Bauchschmerzen, weil irgend ein Joomla oder Wordpress-Plugin den lesenden Zugriff auf das Session-Verzeichnis ermöglichen könnte.
b) Shared Hosting mit suhosin (was wohl der Standard ist)
Da hab ich keine Bauchschmerzen mehr sondern bin schon tot, wenn ich anderen Kunden (also Usern) ermögliche, womöglich fremde Session-Dateien zu listen. Die könnten dann nämlich die Session ebenso leicht hacken wie wenn diese in der URI mitgeführt wird.
Chmod 0700 für das Verzeichnis scheint mir insofern ideal. Wenn aber der die unter A) aufgeführte Möglichkeit (0770) eine breite Zustimmung findet, dann nehme ich die Wahl zwischen 0700 und 0770 als Möglichkeit gerne in die Konfiguration auf. Aber 0777 oder auch nur 0775 bzw. 0755 (≈umask 022) geht aus meiner Sicht ganz und überhaupt nicht und es braucht diese auch nicht.
Insofern lasse ich es erst mal bei:
$dummy=umask(0077);
if (! mkdir(SESSION_FILE_DIR . '/', 0700, true) ) {
** und warte die Diskussion ab. Änderungsvorschlag wäre: (Achtung: blind geschrieben, Voraussichtlich sind Typos enthalten!)**
##Konfiguration:
## Wenn Sie einen eigenen Server haben (kein Shared Hosting!) kann es sinnvoll sein
## diesen Wert auf false zu setzen, dann kann jeder Benutzer mit den Rechten der Gruppe
## des Webservers (oft: www-data) die Session-Dateien ansehen und z.B. löschen:
define('SHARED_HOSTING', true);
…
## Programm
if (SHARED_HOSTING) {
define(SELF_AUTH_UMASK, 0077);
define(SELF_AUTH_DIR_MOD, 0700);
define(SELF_AUTH_FILE_MOD, 0600); # Auf Vorrat für die künftige Benutzung :)
} else {
define(SELF_AUTH_UMASK, 0007);
define(SELF_AUTH_DIR_MOD, 0770);
define(SELF_AUTH_FILE_MOD, 0660); # Auf Vorrat für die künftige Benutzung :)
}
…
$dummy=umask(SELF_AUTH_UMASK); # Vorgezogen, weil es irgendwie unlogisch ist, die umask zu setzen oder nicht.
if ( defined('SESSION_FILE_DIR') ) {
if (! is_dir( SESSION_FILE_DIR ) ) {
if (! mkdir(SESSION_FILE_DIR . '/', SELF_AUTH_DIR_MOD, true) ) {
trigger_error('Fatal: Unmöglich, das Verzeichnis für die Session-Dateien anzulegen.', E_USER_ERROR);
}
if (! chmod( SESSION_FILE_DIR, SELF_AUTH_DIR_MOD ) ) {
trigger_error('Fatal: Unmöglich, die Rechte für das Verzeichnis mit Session-Dateien zu setzen.', E_USER_ERROR);
}
if (! file_put_contents(SESSION_FILE_DIR . '/' . '.htaccess', 'deny from all') ) {
trigger_error('Fatal: Unmöglich, das Verzeichnis für die Session-Dateien zu sperren.', E_USER_ERROR);
}
#### Option zur Diskussion ####
if (! chmod( SESSION_FILE_DIR . '/' . '.htaccess', 0000) ) {
trigger_error('Fatal: Unmöglich, die Datei ' . SESSION_FILE_DIR . '/' . '.htaccess' . ' zu sperren', E_USER_ERROR);
}
}
if (! is_writable(SESSION_FILE_DIR) ) {
trigger_error('Fatal: Es ist unmöglich, die Session-Dateien anzulegen.', E_USER_ERROR);
}
}
Jörg Reinholz