Sven Rautenberg: mit PHP apache log-file auslesen?

Beitrag lesen

Moin!

<?php
$handle = fopen ("/var/log/apache/access.log", "r");
?>

Auch PHP kann normalerweise nicht auf _beliebige_ Verzeichnisse des Server-Rechners zugreifen.

Das ist komplett falsch. PHP kann normalerweise auf ALLE Dateien des Servers zugreifen. Nur mit Einrichtungen wie safe_mode und open_basedir wird durch PHP selbst eine Restriktion auferlegt, die aber absolut nicht zwingend gelten muß.

Es wäre eine enorme Sicherheitslücke,wenn das so einfach ginge.

Works as designed!

Aber /var/log liegt weit _außerhalb_ (mal ganz abgesehen davon, daß die Protokolldatei "access_log" heißen dürfte und es sich offenbar um einen in Ehren ergrauten Apache 1.3.x handelt).

Wie die Logdatei heißt, dürfte irrelevant sein für die Problematik. Ebenso ist die Apache-Version irrelevant.

Relevant ist, ob die User-ID, mit der PHP zugreift, überhaupt das Recht hat, die Logdatei zu lesen.

Du kannst allerdings versuchen, mit einem SymLink zu arbeiten. Wenn die DocumentRoot /var/www/localhost/htdocs ist, könnte das mit
  cd /var/www/localhost/htdocs
  ln -s /var/log/apache/access_log access.log
probiert werden. Dann liegt ein Symlink innerhalb der DocumentRoot, und Apache muß lediglich mit der Option "FollowSymLinks" instruiert werden, daß solche Symlinks benutzt werden dürfen.

Bullshit. Symbolische Links bringen in diesem Zusammenhang gar nichts. Die Apache-Option wirkt auf die Auslieferung von Ressourcen, man könnte also mit Symlinks Verzeichnisse irgendwo auf der Platte ins Document-Root einbinden. Oder auch PHP-Skripte.

Aber beim Öffnen von Dateien durch PHP hat die FollowSymLinks-Option des Apachen keinerlei Auswirkung. Das ist wirklich nur eine reine Dateisystemoperation.

- Sven Rautenberg

--
"Love your nation - respect the others."