open_basedir für die Benutzerverzeichnisse (www)?

Status
Für weitere Antworten geschlossen.

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hallo Ihr.
Jetzt muss ich Euch fragen. Denn mit dem eigenen Latein und mit Google-Suche am Ende und habe es nicht "hinbekommen".
Ich kann ein simples Projekt per Virtual Host nicht aufrufen.
Bekomme immer den "open_basedir restriction in effect." - Fehler.

Also kurz zur Info.
DS211j, DSM 4.0
Benutzer-Home-Verzeichnisse ist aktiviert.
safe_mode ist aktiviert.
Web Station ist aktiviert.
Persönliche Webseite ist aktiviert.
MySQL ist aktiviert.
Häkchen bei "Benutzerdefinierte open_basedir Pfade" ist aktiviert und unverändert bzw. nicht aktiviert -> bei beidem kein "Erfolg".

Habe in meinem Homefolder, im Ordner www ein Projekt in das Verzeichnis "projekt1" gelegt.
also /volume1/homes/mein_benutzername/www/projekt1 bzw /var/services/homes/mein_benutzername/www/projekt1
Darin befindet sich eine index.php (die auf einem anderen Server ganz normal lauffähig ist (eine Webseite eben)).

Dafür habe ich einen vhost "von Hand" definiert. Bin mir relativ sicher, dass dabei alles stimmt bisher:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName projekt1.diskstation.org
ServerAlias projekt1.diskstation.local
DocumentRoot "/volume1/homes/mein_benutzername/www/projekt1"
</VirtualHost>

So. Beim aufruf von projekt1.diskstation.local erhalte ich eine leere weiße Seite mit dem Fehler:

Warning: Unknown: open_basedir restriction in effect. File(/volume1/homes/mein_benutzername/www/projekt1/index.php) is not within the allowed path(s): (/etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes) in Unknown on line 0 Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 Fatal error: Unknown: Failed opening required '/volume1/homes/mein_benutzername/www/projekt1/index.php' (include_path='.:/usr/syno/php/lib/php') in Unknown on line 0

Das sollte Euch bekannt sein. Ich meine der Fehler.
So, wieso bekomme ich das ums "Verrecken" nicht hin, dass die Webseiten in den Benutzerordnern lauffähig sind? Was ist denn da los? Bisher steht in der Variable open_basedir das hier:

open_basedir = /etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes

Das ist der Standardwert. Tut nicht.

Das komische ist, dass es heute mal zwischenzeitlich funktioniert hat! Da habe ich glaube ich explizit den Projektordner an den Wert drangehangen, also:

open_basedir = /etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes:/usr/services/homes/mein_benutzername/www/projekt1

Apache starte ich nach jeder Änderung neu. Mit dem Pfad hintendran hat es mal funktioniert. Doch bin ich mir nicht mehr sicher, und ich verstehe nicht, wieso es jetzt nicht mehr funktioniert.
Wenn ich doch genau die Fehlermeldung befolge und /var/services/homes/mein_benutzername/www/projekt1 zum open_basedir-Wert hinzufüge, wieso funktioniert das nicht? Der Fehler bleibt.

Ich hoffe Ihr könnt mir helfen.

Ideal wäre natürlich, wenn einfach mal alle Webseiten erlaubt sind, sprich alle Ordner nach dem Schema:

/var/services/homes/*/www/*

Nur ich weiß nicht, wie das möglich ist... Dachte eigentlich, dass die Angabe "/var/services/homes" dies schon ermöglichen sollte, oder nicht?! Oder gilt sowas nicht für Unterordner? Ja doch, oder?
Ich hoffe Ihr könnt mir Tipps geben!
Das komische: Wenn ich als basedir "/" nehme, sollte doch eigentlich alles erlaubt sein. Der Fehler besteht trotzdem noch. Der Fehler lautet genau gleich, nur dass halt "/" als basedir ausgegeben wird. Was nun.

DANKE schonmal an alle die es sich durchlesen bzw. Antworten!
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
mhm mal probiert /volume1/homes/mein_benutzername/www zu openbasedir hinzuzufügen? PHP will ja via /volume1/homes zugreifen, so wie im vhost definiert. Also entweder den doc root des vhosts umstellen oder /volume1/homes..... zu openbasedir
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Dran denken, dass es sich nicht um eine Pfadangabe beim open_basedir handelt, sondern um eine Liste mit pattern (Muster), welche mit den Pfaden verglichen wird (siehe auch das PHP-Manual zu diesem Punkt); deswegen funktionieren auch nicht die Platzhalter (?, *)

Itari
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Danke.
Bin ein kleines bisschen weiter, aber das ist ja verflixt!

Habe jetzt vor 5 Min. in der vhost-Config den /var/services/... Pfad zum Projektordner eingetragen.

Dann sah ich in der Apache-Error-Log:

[Fri Jun 01 13:43:14 2012] [error] [client 192.168.0.104] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/services/homes/mein_benutzername/www/projekt1/

DAS sagt mir jetzt bissle, dass es mit einer weiteren Apacheconfig zu tun hat... Eventuell muss ich FollowSymLinks einstellen, richtig?

Wobei, wieso habe ich vorher kurzzeitig das Projekt zum laufen bekommen?

Jetzt habe ich weiterprobiert und wollte anschließend wieder wie oben beschrieben in der vhost-Config den /var/services/... Pfad zum Projektordner eingetragen und habe den Wert in open_basedir auch wieder so eingestellt wie da, wo's vorher lief. Jetzt tut sich wieder nichts.


Das kommt mir irgendwie sehr mystisch vor...


Auch mit Hilfe des Manuals komm ich nicht so wirklich weiter. Was würdet Ihr als nächtest ausprobieren? :-(
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Ich frage mich auch, wieso es nicht reicht, die Benutzerspezifischen Ordner / Webseiten in DSM einzustellen...?
Damit sollten doch die Webseiten schon laufen eigentlich.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
und was passiert wenn du in openbasedir zusätzlich /volume1/homes/dein_benutzer/www einträgst? Dann dürfte PHP nicht motzen und natürlich den doc root in dem Fall wieder auf /volume1/homes/dein_benutzer/www stellen
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
hab ich eben probiert.

vhost:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName projekt1.diskstation.org
ServerAlias projekt1.diskstation.local
DocumentRoot "/volume1/homes/mein_benutzername/www"
</VirtualHost>

In meinem www-Ordner liegt eine index.php die nur "Hello world!" ausgeben soll.

open_basedir:

/etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes:/volume1/homes:/volume1/homes/mein_benutzername:/volume1/homes/mein_benutzername/www

Wenn ich projekt1.diskstation.org aufrufe erhalte ich:

Warning: Unknown: open_basedir restriction in effect. File(/volume1/homes/mein_benutzername/www/index.php) is not within the allowed path(s): (/etc.defaults:/usr/bin/php:/usr/syno/synoman:/etc:/var/run:/tmp:/var/spool/php:/volume1/@tmp/php:/var/services/web:/var/services/photo:/var/services/blog:/var/services/homes:/volume1/homes:/volume1/homes/mein_benutzername:/volume1/homes/mein_benutzername/www) in Unknown on line 0 Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 Fatal error: Unknown: Failed opening required '/volume1/homes/mein_benutzername/www/index.php' (include_path='.:/usr/syno/php/lib/php') in Unknown on line 0

Ich weiß nicht, woran das liegen könnte. Noch eine Idee?
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hey Ihr zwei.
Habe eben mal zum Testen in den VHost

php_admin_value open_basedir none

eingefügt, um open_basedir sozusagen komplett auszuschalten für das Projekt.
Das ist das einzige, was funktioniert. Dann wird "Hello World" aus der index.php ausgegeben.
Okay, dann liegt es entweder an der Schreibweise, wie ich die Pfade in die open_basedir-Variable schreibe, oder es fehlt ein bestimmtes.
Oder Es funkt irgendwas vom DSM dazwischen. Nur was?


Falls Ihr noch ne Idee habt... Gern... Her damit! :)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
ich würde den Text '/volume1/homes:/volume1/homes/mein_benutzername:/volume1/homes/mein_benutzername/www' aus der open_basedir-Variable komplett herausnehmen

und der DocumentRoot "/var/services/homes/mein_benutzername/www" zuordnen

Itari
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Gute Idee.

Ich habe jetzt folgende beiden Varianten probiert:

1. Variante
NameVirtualHost *:80

<VirtualHost *:80>
php_admin_value open_basedir "/var/services/homes/mein_benutzername/www/projekt1:/volume1/homes/mein_benutzername/www/projekt1"
ServerName projekt1.diskstation.org
ServerAlias projekt1.diskstation.local
DocumentRoot "/volume1/homes/mein_benutzername/www/projekt1"
</VirtualHost>

2. Variante
NameVirtualHost *:80

<VirtualHost *:80>
php_admin_value open_basedir "/var/services/homes/mein_benutzername/www/projekt1"
ServerName projekt1.diskstation.org
ServerAlias projekt1.diskstation.local
DocumentRoot "/volume1/homes/mein_benutzername/www/projekt1"
</VirtualHost>

Beide male kommt der "restriction"-Fehler. :-(

Also das ist doch nicht normal, das musst Du zugeben?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Der Text (und ich sage bewusst nicht Pfad) aus der DocumentRoot "/volume1/homes/mein_benutzername/www/projekt1"

wird in deiner 2. Variante gegen den Text (und ich sage bewusst nicht Pfad) aus der open_basedir-Variablen "/var/services/homes/mein_benutzername/www/projekt1" verglichen. Und sind die Texte identisch??? Nein ...

So denkt PHP ... ich hatte bereits oben angedeutet, dass es sich nicht um Pfade in der open_basedir handelt, sondern um Textmuster (wie beim Suchen und Ersetzen in einem Texteditor)

Itari
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Okay, aber wieso funktioniert
NameVirtualHost *:80

<VirtualHost *:80>
php_admin_value open_basedir "/volume1/homes/mein_benutzername/www/projekt1"
ServerName projekt1.diskstation.org
ServerAlias projekt1.diskstation.local
DocumentRoot "/volume1/homes/mein_benutzername/www/projekt1"
</VirtualHost>
dann ebenfalls nicht?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
keine Ahnung ... ich lass immer open_basedir leer, dann funktioniert es und denke nicht weiter darüber nach

Itari
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Wie benutzt Du Deinen Server?
Es soll ja ein Sicherheitsrisiko darstellen, aber nur unter bestimmten Bedingungen natürlich...?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ein Sicherheitsrisiko würde ich nicht per se sagen. Kommt drauf an was du für PHP Sachen am laufen hast. Besser wäre es schon den Zugriff von PHP mittels openbasedir zu beschränken, aber so viel mehr an Sicherheit bringt das imho ned
 

Christoph_K

Benutzer
Mitglied seit
13. Nov 2011
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
So sehe ich das jetzt auch. Wenn ich schon früher so gedacht hätte. Aber es ist schon doof dass das nicht so funktioniert in dem man ein paar Angaben in open_basedir macht und gut ist. Naja ich schalte es pro VHost ab. Ich danke Euch!
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat