[PHP] Root dir voor users?

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Hmmz, moeilijk waaronder dit topic nou precies valt, maar ik gok toch environments. 8)7

Mijn probleem is als volgt. Ik heb een LAMP-server: Ubuntu Breezy, Apache 2, PHP5. Op deze webserver staan meerdere websites gehost. Nu wil ik dat je met een PHP-script niet zomaar in elke directory kan rondneuzen en dus ook niet schrijven, verwijderen etc. Elke website die ik host moet een 'root dir' hebben. Hoe kan ik dit oplossen? Het rechtensysteem in linux doet hier niets mee, aangezien Apache, ook op user-requests, onder de user www-data werkt.

Als ik dus twee websites heb, grofweg in de dirs '/website1' en '/website2' hoe stel ik dan in dat, voor website1, php geen files buiten '/website1' mag benaderen en website2 niet buiten '/website2'? |:(

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 22-09 15:11
http://nl2.php.net/features.safe-mode
En dan met name de open_basedir setting

[ Voor 35% gewijzigd door frickY op 07-04-2007 22:46 ]


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Je kan de open_base dir in .htaccess aangeven als ik me niet vergis.
Anders moet je toch eens kijken hoe virtual hosting werkt zodat je een shared hosting environment kan opzetten en dat dus per virtual host kan instellen in je httpd.conf

Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
En laat ik die virtual hosts nou net al gebruiken, komt niet verkeerd uit. Het is me gelukt om vanuit de Apache conf-files per directory de open_basedir in te stellen d.m.v:

code:
1
2
3
<Directory />
    php_admin_value open_basedir /website1
</Directory>


(per virtual host, maar zonder virtual hosts zal het ongetwijfeld ook werken)

Wat leidt tot de prachtige error:

Warning: mkdir() [function.mkdir]: open_basedir restriction in effect. File(/test/dir) is not within the allowed path(s): (/home/dev/) in /website1/mkdir_test.php on line 10 O+

frickY en Suepahfly, bedankt voor jullie hulp! _/-\o_

[ Voor 58% gewijzigd door ERIKvanPAASSEN op 08-04-2007 16:33 ]


Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Ik gebruik naast de virtual hosts ook één virtual hosts met userdirs. Alleen krijg ik die niet goed ingesteld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<VirtualHost *:80>
    ServerName domein.naam
    
    DocumentRoot /var/www

    UserDir "public_html"

    <Directory /home/*/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all

        php_admin_value open_basedir /home/*/
    </Directory>
</VirtualHost>


Werkt totaal niet, dan kan geen enkele PHP-pagina meer worden geparsed binnen de virtual host. |:(

Acties:
  • 0 Henk 'm!

Verwijderd

Vanzelfsprekend. Wie zegt dat PHP die wildcard moet interpreteren?
Een UserDir is geen virtual host. Die kun je dus ook niet als zodanig gebruiken. Je moet of de open_basedir instelling voor elke directory apart opgeven, of in 1 keer /home instellen als open_basedir, en de rest regelen met de bestandsrechten van het filesystem.

Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Bestandsrechten gaat dus niet, omdat Apache met één user werkt: www-data. En die wildcard ja, ik had ergens in een Apache-doc file gelezen dat die zou worden vervangen door de username, vond ik ook al raar, maar ik heb het niet zelf verzonnen...
If a path is provided which contains an asterisk (*), a path is used in which the asterisk is replaced with the username. Given this configuration:

UserDir /var/www/*/docs
Maar dat werkt dus kennelijk alleen in combinatie met de UserDir-setting...

EDIT: En ik weet dat een userdir geen virtual host is, en zo gebruik ik hem ook niet. :P Als je de regel 'php_admin_value open_basedir /home/*/' weghaalt, werkt alles prima, uiteraard, met verschillende userdirs bínnen één virtual host.

[ Voor 18% gewijzigd door ERIKvanPAASSEN op 08-04-2007 17:01 ]


Acties:
  • 0 Henk 'm!

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Ik ben er nog steeds niet helemaal uit, want om élke userdir apart in te stellen lijkt mij tamelijk omslachtig/veel werk. Het zou toch zeker makkelijker moeten kunnen?

Acties:
  • 0 Henk 'm!

Verwijderd

volgensmij kan je met suEXEC zorgen dat elke virtualhost onder zijn eigen user/group draait. mischien moet je je daar eens in gaan verdiepen.

veel meer opties zijn er niet echt volgensmij waarmee je PHP kunt forceren om als een user/group te draaien. ik weet dat het kan want ik heb het hier zelf ook een paar jaar geleden gedaan maar dat was wel onder apache1.3 met php4.

vooral in combinatie met een ftp-server is dat handig omdat dan alle geuploade bestanden als die ingelogde user worden weggeschreven en dus ook apache alleen maar die bestanden kan lezen. die van andere vitualhost worden weer onder een andere user gelezen en zijn dus die niet leesbaar/schijfbaar etc.
Pagina: 1