[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Frage zu Sicherheit public_html und php



On Thu, May 01, 2003 at 09:17:44PM +0200, Stephan Dietl wrote:
> Michael Hilscher <macvampi@michael-hilscher.de> schrieb:
> > Ich weiss nicht recht. Die Syntax für safe_mode sieht bei mir anders
> > aus. Allerdings hast Du ja geschrieben, dass Dir open_basedir Probleme
> > bereitet. Nun verstehe ich allerdings nicht _was_ nicht funktioniert.
> 
> Das Problem ist ja, daß das Skript des User funktioniert obwohl es das
> nicht sollte. Es macht ein ls -l unter /var/www, dann ändert er es auf
> ein interessantes Verzeichnis das der Apache lesen kann, dann macht er
> sein system("cat INTERESSANTE_DATEI") und liest Daten aus wie die
> config.php des Webforums das läuft ( http://fud.prohost.org ), wo das
> MySQL-Passwort des Forums drinsteht, etc....
> 
> Bei der Einstellung:
> 
> <VirtualHost XXX.XXX.XXX.XXX>
>     ServerName SERVER/members/USER
>     ServerAlias SERVER/members/USER
>     DocumentRoot /var/www/members/USER
>     User USER
>     Group USER
>     php_admin_flag safe_mode on
>     php_admin_value open_basedir /var/www/members/USER
> </VirtualHost>
Mit User und Group innerhalb von VirtualHost aktivierst Du SuEXEC in
Apache 1.3.x. ServerName und ServerAlias verweisen auf den /die Domainnamen -
anstelle der IP kannst Du auch mit einem Wildcard arbeiten (zumindest
bei Namensbasierten VirtualHosts).

> geht das Skript immer noch:
> 
> <?php
> 
> echo "You have been 0wnzd";
> 
> system("ls /var/www/ -l");
> 
> system("cat /var/www/.....");
> 
> ?>
System und Exec Befehle werden mit dem safe_mode geblockt. Für
interne Filebefehle von PHP wird OpenBasedir verwendet ...

> Füge ich dem Virtuel Host ein <Directory> mit /var/www/members/*  hinzu 
> mit open_basedir auch auf /var/www/members/* (ein genauer Pfad wie
> /var/www/members/USER ändert nichts ?!) und safe_mode on, dann geht das 
> Skript nicht mehr ABER auch nichts das nur unterhalb des Verzeichnisses 
> arbeiten würde bzw. ein <?phpinfo?> oder ein <?php echo "test"; ?>
Versuche es mal so:
 <VirtualHost *>
 ServerName username.domain.de
 DocumentRoot /var/www/members/USER
 php_admin_flag safe_mode on
 php_admin_value open_basedir /var/www/members/USER
 </VirtualHost>

Natürlich muss der DNS so konfiguriert sein, das die subdomain
username.domain.de mit der IP des Servers aufgelöst werden kann. In der
Bind Konfig kannst Du ebenfalls mit Wildcards arbeiten - es muss hier
also nicht jede Subdomain zusätzlich eingetragen werden.

> > Du kannst mit dem minni PHP Script:
> > --- cut ---
> > <?php
> > echo phpinfo ();
> > ?>
> > --- /cut ---
> > überprüfen, welche Einstellungen für den Ort in dem das PHP Script
> > ausgeführt wurde gelten.
> 
> open_basedir no value no value
> safe_mode Off Off
> 
> Er übernimmt die Einstellungen also nicht....aber warum?
Ich vermute, dass der Apache den VirtualHost als fehlerhaft konfiguriert
ansieht und den Abschnitt überspringt. Wirf einen Blick ins Logfile.


greetinXs,         
Michael Hilscher  
-- 
Would Mozart have been more productive if he had scribes to help him, a
secretary and a CEO to lead his way? -- Linus Torvalds



Reply to: