Fragen zu open_basedir und session.save_path

Frank37K

New Member
Hallo :)

Vorab einige Infos zum Server:

BS: openSUSE 12.1 64bit
Plesk: 10.4.4
PHP: 5.3.8 (wird ausgeführt als FastCGI)
Server-Version : Apache
CMS: pragmaMx 1.12.2

Die php Einstellungen werden aus folgender Datei gezogen:

/srv/www/vhosts/domain.de/etc/php.ini

Ich habe einige Fragen bezüglich der open_basedir und session.save_path Einstellungen.

Folgendes:

Momentan ist unser Server so eingestellt, das der open_basedir Pfad folgendermaßen aussieht:

open_basedir = "/srv/www/vhosts/domain.de/httpdocs/:/tmp/"

Der session.save_path sieht so aus:

session.save_path = "/var/tmp/session_safe_path"

Die Website, inkl. Forum, liegt in

/srv/www/vhosts/domain.de/httpdocs

Gruppen/Eigentümer wie folgt:

/srv/www/vhosts/domain.de/httpdocs

hat als Gruppe psaserv, als Eigentümer den Systembenutzer laut Plesk.

ALLES innerhalb von httpdocs hat als Gruppe psacln und als Eigentümer wieder den Systembenutzer.

Ordner sind auf 0755, Dateien auf 0644 (bis auf die config.php, die hat 0444)

Innerhalb des httpdocs habe ich einen tmp Ordner mit CHMOD 1777.

Trotz dieser Einstellungen erhalte ich im error_log immer wieder Meldungen die so (halt auch mit anderen php Dateien usw.) aussehen:

[Tue May 15 10:53:03 2012] [warn] [client xx.xxx.xxx.x] mod_fcgid: stderr: PHP Warning: fileperms(): open_basedir restriction in effect. File(/var/tmp/session_safe_path) is not within the allowed path(s): (/srv/www/vhosts/domain.de/httpdocs/:/tmp/) in /srv/www/vhosts/domain.de/httpdocs/bgphpsecinfo/PhpSecInfo/Test/Session/save_path.php on line 70


Jetzt stellt sich mir die Frage WARUM das so ist.

Habe ich etwas falsch eingestellt ? Laut Plesk hat eine "httpdocs" innerhalb der vhosts/domain.de immer die Gruppe psaserv und alles darin psacln. Daran sollte es also nicht liegen, Eigentümer stimmt ja auch. Seite und Forum funktionieren auch, d.h. die PHP sessions können geschrieben werden.
Backups mit mySQLDumper funktionieren ebenfalls, grad getestet.

Nur warum bekomme ich trotzdem diese Fehlermeldungen bezüglich der open_basedir ? Und welchen session.save_path würdet ihr empfehlen ?

Vielen Dank für Eure Hilfe im Voraus :)

Grüße,
Frank
 
/var/tmp/session_safe_path ist nicht in open_basedir enthalten und daher kommt der Fehler. Steht doch klar in der Fehlermeldung.
Ich habe für jeden User ein eigenes tmp-Verzeichnis im Home-Dir, welches ich auch für die Session-Daten verwende (allerdings nutze ich auch kein Plesk o.ä.).
Du kannst auch session.save_path auf /tmp umbiegen (bereits in der open_basedir enthalten) oder die open_basedir erweitern.
Bedenke auch, das open_basedir eine reine PHP-Einstellung ist und sofern du auch andere Scriptsprachen wie Perl, Python o.ä. anbietest, ziemlich sinnlos ist.
 
Also müsste dann der open_basedir Eintrag so aussehen

open_basedir = "/srv/www/vhosts/domain.de/httpdocs/:/tmp/:/var/tmp/session_safe_path"

wenn ich den session_safe_path Ordner hinzufüge ?
 
Nein, es muss so aussehen:
Code:
 open_basedir = "/srv/www/vhosts/domain.de/httpdocs/:/tmp/:/var/tmp/session_safe_path/"
Mit Deiner Variante hättest Du /var/tmp komplett freigegeben.
 
Neues Jahr, neues Problem :mad:

Nach dem Update auf Plesk 11.0.9 lief die Seite inkl. Forum etc. erstmal 100%ig korrekt, keinerlei Fehlermeldungen etc.

Seit einem der letzten Plesk MU bekomme ich allerdings im Admin Bereich von pragmaMx folgende, für mich nicht nachvollziehbare, Fehlermeldungen:


The following files and directories must be writable by the system:

/srv/www/vhosts/battlegroup42.de/httpdocs/config.php
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/classes/Textarea/config.inc.php
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/classes/Captcha/settings.php
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/prettyPhoto/config.php
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Downloads/d_config.php
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/UserGuest/settings.php
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Web_Links/l_config.php
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Your_Account/config.php
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/classes/Textarea
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/classes/Captcha
/srv/www/vhosts/battlegroup42.de/httpdocs/includes/prettyPhoto
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Downloads
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/UserGuest
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Web_Links
/srv/www/vhosts/battlegroup42.de/httpdocs/modules/Your_Account
/srv/www/vhosts/battlegroup42.de/httpdocs/dynadata/logfiles
/srv/www/vhosts/battlegroup42.de/httpdocs/dynadata/tmp
/srv/www/vhosts/battlegroup42.de/httpdocs/dynadata/backup
/srv/www/vhosts/battlegroup42.de/httpdocs/dynadata/cache
/srv/www/vhosts/battlegroup42.de/httpdocs/media/files
/srv/www/vhosts/battlegroup42.de/httpdocs/media/flash
/srv/www/vhosts/battlegroup42.de/httpdocs/media/userpics
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/enzy
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/macchi
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/attacker
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/kate
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/spitfire
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/p39
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/tiffy
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/jimmy
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/re2000
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/ju87
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/m10
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/bv
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/j2f
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/storch
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/shermans
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/oerlikon
/srv/www/vhosts/battlegroup42.de/httpdocs/media/images/bg42news/boomerang
/srv/www/vhosts/battlegroup42.de/httpdocs/layout/style

Hier einige Infos:

CMS-Version:
pragmaMx 1.12.3.1.33.4.14 (2012-06-21)

PHP-Version:
5.3.8

MySQL-Version:
5.5.28-log

Server-Version:
Apache

- OS ist OpenSUSE 12.1 mit Plesk 11.0.9 inkl. Update #36 vom 14.02.13.
- Server API ist cgi/FastCgi

Die "angemeckerten" Dateien und Verzeichnisse haben allerdings die richtige Gruppe/Eigentümer/Rechte, ich habe da auch NICHTS daran geändert (gab es auch keinen Grund für, Seite lief perfekt), daher kann ich mir nicht erklären, warum pragmaMx da auf einmal diese Fehler anzeigt. Mit Plesk 10.x hatte ich diese Meldungen nicht. Wäre für jegliche Hinweise sehr dankbar :)


Fehlermeldungen im errorLog sehen so aus:

mod_fcgid: stderr: PHP Warning: is_file(): open_basedir restriction in effect.

open_basedir ist laut phpinfo sowohl für local als auch master:

/srv/www/vhosts/battlegroup42.de:/tmp


Falls ihr noch weitere Infos braucht, z.B. aus dem ErrorLog, der phpinfo etc. sagt bitte bescheid.

Grüße,
Frank
 
So langsam drehe ich hier wirklich am Rad :mad:

Aktuelle Einstellungen für open_basedir:

/srv/www/vhosts/battlegroup42.de/httpdocs/:/tmp/:/var/tmp/session_safe_path

Alle Ordner sind vorhanden, die Seite inkl. aller Unterordner, php Dateien usw. liegt in

/srv/www/vhosts/battlegroup42.de/httpdocs

trotzdem bekomme ich weiterhin die Fehlermeldung mit nicht vorhandenen Schreibberechtigungen usw.

Der session.save_path ist in:

/var/tmp/session_safe_path

dieser Ordner hat als CHMOD 0755.


Was zum Henker stimmt da nicht ?
 
Wird die richtige php.ini angezogen? Läuft PHP unter dem richtigen User? Läuft es auch wirklich als FastCGI und per Suexec? Diese Infos siehst du eigentlich alle per phpinfo()
 
Laut phpinfo:

Configuration File (php.ini) Path : /etc/php5/fastcgi
Loaded Configuration File : /srv/www/vhosts/battlegroup42.de/etc/php.ini
_SERVER["GATEWAY_INTERFACE"] : CGI/1.1
session.save_handler : user (local) files (master)
session.save_path : /var/tmp/session_safe_path/ (local und master)

Falls du mehr Angaben brauchst kann ich dir den kompletten Inhalt auch per PM schicken.
 
trotzdem bekomme ich weiterhin die Fehlermeldung mit nicht vorhandenen Schreibberechtigungen usw.

Bitte die genaue Fehlermeldung. Ansonsten spawne mal eine Shell im Kontext des entsprechenden Benutzers und schaue, ob du im dein Savepath-Verzeichnis wechseln kannst.
 
Ich kann dir nur die letzten Einträge aus dem errorlog posten, im pragmaMx werden keine weiteren Infos angezeigt, nur das aus der Liste.

[Fri Feb 15 15:24:54 2013] [error] [client 157.55.33.50] Directory index forbidden by Options directive: /srv/www/vhosts/battlegroup42.de/httpdocs/bg_files/
[Fri Feb 15 15:43:10 2013] [warn] [client 66.249.78.132] mod_fcgid: stderr: PHP Warning: is_file(): open_basedir restriction in effect. File(index.php/de/News-Battlegroupforty-two-official-server-important-update-item-24.html) is not within the allowed path(s): (/srv/www/vhosts/battlegroup42.de/httpdocs/:/tmp/:/var/tmp/session_safe_path/) in /srv/www/vhosts/battlegroup42.de/httpdocs/mod.php on line 45
[Fri Feb 15 16:09:18 2013] [warn] [client 66.249.75.131] mod_fcgid: stderr: PHP Warning: is_file(): open_basedir restriction in effect. File(index.php/de/News-page-3.html) is not within the allowed path(s): (/srv/www/vhosts/battlegroup42.de/httpdocs/:/tmp/:/var/tmp/session_safe_path/) in /srv/www/vhosts/battlegroup42.de/httpdocs/mod.php on line 45

Ich verstehe NICHTS mehr, ehrlich.

Update:
Habe mal eben probeweise in /var/tmp/session_safe_path reingeschaut, da wurden drei Dateien angelegt, aber die Probleme sind nach wie vor da.
 
Last edited by a moderator:
Da fällt mir noch was ein:

Kann es sein, dass durch das Plesk Update irgendwelche Änderungen beim PHP gemacht wurden ? Sprich Gruppe/Eigentümer müssen neu zugewiesen werden ?

Die Seite ansich läuft ja nicht unter "root", nur der Hauptordner "battlegroup42.de" gehört "root", der Ordner "httpdocs" in "battlegroup42.de" ist Gruppe psaserv [1003] mit Eigentümer bg42 [10000], und ALLES unterhalb von "httpdocs" ist Gruppe psacln [1004] mit Eigentümer bg42 [10000].

Diese Einstellungen sind 100% richtig, daran wurde auch nichts geändert beim Upgrade auf Plesk 11.0.9.

Muss da irgendwie der Eigentümer "bg42" mit PHP "verknüpft" werden ? Entschuldigt bitte diese dumme Frage, aber ich hatte dieses Problem vorher ja nicht und bin deswegen jetzt völlig überfragt.
 
Eine kleine generelle Anmerkung: Der Sessionpfad muss nicht als open_basedir hinterlegt sein. Sollte er aus Sicherheitsgründen auch nicht. Leider ist das vielen Entwicklern unbekannt...
 
Ok danke, habe diesen Pfad aus der open_basedir entfernt.

Aber leider ist mein Problem dadurch immer noch nicht gelöst. Nach wie vor meckert das CMS über nicht vorhandene Schreibrechte, die aber sehr wohl vorhanden sind. Zumindest laut Gruppe/Eigentümer und CHMOD.

Wo erkenne ich denn, unter welchem User PHP läuft ? Und wie kann ich das ggf. anpassen ?

UPDATE:

Habe über Putty den Befehl "ps aux | grep -i php5" ausgeführt, und dort wird angezeigt das php über "root" läuft. Würde das nicht das Problem erklären ? Der User, unter dem die Website läuft ist ja NICHT root, sondern ein anderer. Also müsste ich doch logischerweise den User für PHP ändern oder nicht ? Nur wie mache ich das ?
 
Last edited by a moderator:
Habe über Putty den Befehl "ps aux | grep -i php5" ausgeführt, und dort wird angezeigt das php über "root" läuft.
Sicher dass du nicht dein eigenes Grep Kommando oder ein anderes PHP-Skript gesehen hast?
Eventuell hast du PHP auch mit einer SUID-Methode laufen um unterschiedliche User verwenden zu können.

Würde das nicht das Problem erklären ?
Nein, root darf alles. Auch die Dateien anderer User lesen.

Wo erkenne ich denn, unter welchem User PHP läuft ?
Bitte lade mal folgendes PHP-Skript auf deinen Webspace und copy-paste die Ausgabe:
Code:
<? $User = posix_getpwuid(posix_getuid()); ?>
Dieser Webspace l&auml;uft unter dem Benutzernamen <?=$User['name'];?> (ID <?=$User['uid'];?>/ GID <?=$User['gid'];?>)<br>
PHP ist eingebunden als <?=php_sapi_name();?>.
 
Habe deinen Code in eine php Datei gepackt und versucht sie zu starten.
Ergebnis: Leere, komplett weiße Seite.

Eintrag aus dem errorlog:

mod_fcgid: stderr: PHP Fatal error: Call to undefined function posix_getpwuid() in /srv/www/vhosts/battlegroup42.de/httpdocs/abfrage.php on line 1
 
Call to undefined function posix_getpwuid()
Also posix könnte Suse aber in den Core packen...
Die entsprechende Erweiterung heisst php5-posix in der Paketverwaltung
 
posix installiert, nach Ausführung deines Scripts kommt das hier:

Dieser Webspace läuft unter dem Benutzernamen wwwrun (ID 30/ GID 8)
PHP ist eingebunden als cgi-fcgi.
 
Ups, mir ist ein Fehler unterlaufen. Es ist möglich dass der falsche Benutzer angezeigt wird, bitte versuch dies:
Code:
<? $User = posix_getpwuid(posix_geteuid()); ?>
Dieser Webspace l&auml;uft unter dem Benutzernamen <?=$User['name'];?> (ID <?=$User['uid'];?>/ GID <?=$User['gid'];?>)<br>
PHP ist eingebunden als <?=php_sapi_name();?>.
Bei Benutzer-Wechsel kann die effective UID von der realen UID abweichen, nur die effective ist relevant.
 
Habe den neuen Code verwendet, Ergebnis:

Dieser Webspace läuft unter dem Benutzernamen wwwrun (ID 30/ GID 8)
PHP ist eingebunden als cgi-fcgi.
 
Back
Top