Verwendung als Apache-Modul
Wenn PHP als Apache-Modul eingesetzt wird, übernimmt es die
Benutzerrechte des Apache (üblicherweise die des Users "nobody"). Das hat
verschiedene Auswirkungen auf Sicherheit und Authentifizierung. Wenn Sie
beispielsweise via PHP auf eine Datenbank zugreifen, müssen Sie
dem Benutzer "nobody" Zugriffsrechte auf die Datenbank erteilen, es sei denn,
diese Datenbank hat eine integrierte Zugriffskontrolle. Das
heißt, dass ein böswilliges Skript auch ohne Benutzerkennung und
Passwort auf die Datenbank zugreifen und sie verändern könnte. Es ist durchaus
möglich, dass ein Web-Spider über die Webseite eines
Datenbankadministrators stolpert und alle Ihre Datenbanken löscht.
Sie können sich dagegen mit Apache-Authentifizierung schützen, oder
ein eigenes Zugangsmodell unter Verwendung von LDAP, .htaccess Dateien
etc. entwerfen, und diesen Code als Teil Ihrer PHP-Skripte einbinden.
Ist erst einmal eine Sicherheitsstruktur bis zu dem Punkt eingerichtet, an
dem der PHP-User (in diesem Falle der Apache-User) nur noch ein geringes
Risiko darstellt, hat man meist die Situation, dass PHP gehindert wird,
beliebige Dateien in das Benutzerverzeichnis zu schreiben. Oder PHP ist
nicht mehr in der Lage, auf Datenbanken lesend oder verändernd zuzugreifen.
In gleicher Weise wird auch verhindert, "gute" oder "bösartige" Dateien zu
schreiben, oder "gute" bzw. "bösartige" Datenbanktransaktionen durchzuführen.
Ein häufig gemachter Fehler in Punkto Sicherheit ist, Apache Rootrechte
zu erteilen oder die Möglichkeiten von Apache in anderer Weise auszuweiten.
Die Ausweitung der Benutzerrechte für Apache auf root ist extrem
gefährlich und kann das gesamte System kompromittieren, daher sollten
Prozesse, die wie sudo oder chroot mit Rootrechten arbeiten, niemandem
zugänglich sein, der kein Sicherheitsprofi ist.
Es gibt auch ein paar einfachere Lösungen. Mit
open_basedir können Sie
kontrollieren, welche Verzeichnisse PHP benutzen darf oder nicht. Sie
können auch einen Bereich nur für Apache einrichten, um alle
webbasierten Aktivitäten auf dem System oder nicht dem Benutzer gehörende
Dateien zu verhindern.