Vielleicht gibt es auf Ihrer Seite schon einen registrierungspflichtigen passwortgeschützten Bereich, zum Beispiel ein Forum. Wenn Sie nun auf die Idee kommen, einen andere Teil der Website für die gleichen Benutzer zugänglich zu machen, stehen Ihnen mehrere Wege offen. Sie könnten alle auffordern, sich nochmal zu registrieren, und diesen Teil mit dateibasierter Zugangskontrolle absichern. Das wäre allerdings nicht so toll, denn dann müssten die Zugangsdaten der Benutzer an zwei Stellen gepflegt werden.
Wenn das Forum schon eine SQL-Datenbank zur Benutzerverwaltung verwendet, können Sie den Apache-Server relativ einfach so einrichten, dass er Namen und Passwort ebenfalls daraus bezieht. Allerdings muss die Methode, den Passwort-Hash zu erzeugen, eine sein, die auch Apache beherrscht, im Beispielfall das gute alte »crypt()
«
. Zusätzlich müssen Sie die beiden Apache-Module »mod_dbd.so
«
and »mod_authn_dbd.so
«
aktivieren. Dazu genügen zwei Zeilen in der Webserver-Konfiguration:
LoadModule dbd_module modules/mod_dbd.so LoadModule authn_dbd_module modules/↩ mod_authn_dbd.so
Beachten Sie, dass der zweite Wert jeder Zeile ein absoluter oder relativer Pfad zum jeweiligen Modul ist. Der genaue Name hängt von der verwendeten Distribution beziehungsweise Apache-Installation ab.
Wenn die Module geladen sind, fehlt noch die passende Konfiguration, damit Apache die Zugangsdaten aus der Datenbank liest. Mit PostgreSQL sieht das ungefähr so aus wie in Listing 5.
Listing 5
SQL-Authentifizierung
DBDriver pgsql DBDParams "host=localhost dbname=forum user=apache password=secret" <Location /forum-users-only> AuthType Basic AuthName "Forum Users Only" AuthBasicProvider dbd Require valid-user AuthDBDUserPWQuery "SELECT password FROM users WHERE user = %s" </Location>
Als erstes legen Sie den Datenbank-Treiber fest, in diesem Fall »pgsql
«
. Für MySQL schreiben Sie an dieser Stelle »mysql
«
. Apache beherrscht außerdem Oracle und SQLite. Nach dem Treiber folgen die Verbindungsparameter. Für MySQL und PostgreSQL sind das der Datenbank-Host, der Name der Datenbank, der Benutzername und das Passwort.
Die nächsten Zeilen sollten Ihnen langsam bekannt vorkommen. Der einzige Unterschied zu den vorigen Beispielen ist der »AuthBasicProvider
«
, den Sie nun auf »dbd
«
einstellen. Am Ende steht der SQL-Code für die Datenbankabfrage. Weil jede Datenbank anders aufgebaut ist, müssen Sie Apache genau sagen, wie es das Passwort ausliest.
In vielen Netzwerken läuft heute ein LDAP-Server, der an zentraler Stelle unter anderem die Benutzerdaten führt. Da liegt es nahe, diesen auch zur Authentifizierung passwortgeschützter Bereiche auf dem Webserver zu verwenden. Mit dem Apache-Modul »mod_authnz_ldap
«
ist das kein großes Problem. Die folgende Konfigurationsanweisung aktiviert das Modul:
LoadModule authnz_ldap_module modules/↩ mod_authnz_ldap.so
Damit Apache davon Gebrauch macht, müssen Sie ihm die LDAP-URL mitteilen:
<Location /content> AuthLDAPURL "ldap://ldap1.company.com/ou=↩ People, o=Company" Require valid-user </Location>
Mit dem Eintrag eines zweiten Servers stellen Sie leicht eine gewisse Ausfallsicherheit her – klarerweise muss dann im Netz auch ein zweiter Server laufen! Die entsprechende Zeile sieht so aus:
AuthLDAPURL "ldap://ldap1.company.com ↩ ldap2.company.com/ou=People, o=Company"
Das LDAP-Modul bietet einige Optionen. Sie können Gruppen-Informationen verwenden oder auch den Zugang in Abhängigkeit von anderen LDAP-Attributen gewähren.