Christian Seiler: macht .htaccess langsam?

Beitrag lesen

Hallo Dennis,

Welche Gründe sprechen denn für ein Options -FollowSymLinks? In einem System, wo der Apache Scripte schön brav unter den Rechten des Users ausführt (suExec, suPHP) kann der User doch mit FollowSymLinks auch nicht mehr machen, als er nicht auch schon so mit seinem Benutzeraccount auf der Shell machen könnte.

Szenario: User A und B sind auf dem Server. User A liegt in /var/www/usera/..., User B in /var/www/userb/.... User A kann den Inhalt von userb per Default nicht lesen (der Apache aber schon). Stell Dir vor, User A weiß nun (z.B. durch eine PHP-Fehlermeldung im Browser), dass die Konfigurationsdatei für den DB-Zugriff von User B unter /var/www/userb/foo/bar/config.php zu erreichen ist. Dann kann er bei sich einen Symlink (das Ziel ist ja erstmal egal) auf eben diese Datei anlegen:

ln -s /var/www/userb/foo/bar/config.php /var/www/usera/htdocs/mysql-konfiguration.txt

User A kann den Symlink natürlich nicht lesen. Wenn jedoch +FollowSymLinks aktiviert ist, prüft der Apache den Symlink nicht und liefert (die Endung der Datei ist ja .txt, den Link liest der Apache ja nicht aus, weil er ihm immer folgt) beim Zugriff auf die Domain von User A die config.php als Textdatei aus. Was dann dazu führt, dass User B Zugriff auf die Datenbankzugangsdaten von User A hat.

Das "tolle" ;-) ist, dass das sogar mit Links auf z.B. .htaccess oder .htpasswd geht, obwohl .ht* verboten ist! Weil der Link eben NICHT auf .ht anfängt!

Zudem kann man sich Szenarien vorstellen, in denen man als Angreifer (der keinen Account hat) Scripte dazu bringen kann, Symlinks auf z.B. /etc/passwd zu setzen, über die man dann von außen darauf zugreifen kann.

Daher: +FollowSymlinks sollte man NUR DANN aktivieren, wenn man weiß was man tut. Es gibt schließlich SymlinksIfOwnerMatch, die für ExecCGI, mod_rewrite und normale Symlinks MEHR ALS AUSREICHEN. Und seit Apache 2.2 kann man übrigens bei AllowOverride angeben, welche Options ein User setzen darf (AllowOverride Options=SymlinksIfOwnerMatch,MultiViews,...), d.h. AllowOverride Options kann teilweise aktiviert sein und somit dem User Konfigurationsmöglichkeiten bieten, ohne dass damit eine Sicherheitslücke geschaffen wird, weil der User +FollowSymlinks aktivieren kann.

Viele Grüße,
Christian