Apache-Site-Zugriffe automatisch über Active Directory authentifizieren lassen
Gerade in größeren IT-Umgebungen wird heterogene Software eingesetzt. Und bei dem Start fast jeder Anwendung heißt es dann für den Anwender: „Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein“…
Viele Single-Sign-On-Lösungen versuchen – mehr oder minder erfolgreich – diesen Missstand einzudämmen – in der Regel mit mäßigem Komfort-Gewinn.
Zumindest bei webbasierter Software kann der Webhäuptling recht einfach dabei helfen, sehr komfortabel eine sichere Umgebung zu bieten – und das, ohne dass der Anwender überhaupt mitbekommt, dass hier eine Authentifizierung durchgeführt wird.
Möglich wird das durch die Einbindung der Kerberos-Authentifzierung in die Apache-Konfiguration.
Voraussetzungen
Neben dem installierten Apache werden auf einem Debian-basierten System noch folgende Pakete benötigt:
# aptitude install krb5-config krb5-clients # aptitude install samba-client # aptitude install libapache2-mod-auth-kerb
Damit werden zunächst einmal die erforderlichen Kerberos-Komponenten installiert. Für den danach benötigten Domänen-Beitritt des Servers folgt dann der Samba-Client, und damit dann auch der Webserver die Domänen-Anmeldung nutzen kann, wird abschließend noch das entsprechende Modul im Dateisystem bereitgestellt.
Schritt 1 – Kerberos und Samba konfigurieren
Zunächst muss es Kerberos ermöglicht werden, an die Domäne angebunden zu werden. Dazu bedarf es der Erstellung einer passenden Konfigurationsdatei in /etc/krb5.conf:
# /etc/krb5.conf [libdefaults] default_realm = MEINEDOMAIN.LOCAL kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true fcc-mit-ticketflags = true default_keytab_name = FILE:/etc/krb5.keytab [realms] MEINEDOMAIN.LOCAL = { kdc = erster-dc.meinedomain.local kdc = zweiter-dc.meinedomain.local master_kdc = erster-dc.meinedomain.local admin_server = erster-dc.meinedomain.local default_domain = meinedomain.local } [domain_realm] .meinedomain.local = MEINEDOMAIN.LOCAL meinedomain.local = MEINEDOMAIN.LOCAL
Samba benötigt folgende Einstellungen in /etc/samba/smb.conf:
# /etc/samba/smb.conf netbios name = meinserver realm = MEINEDOMAIN.LOCAL security = ADS encrypt passwords = yes password server = erster-dc.meinedomain.local workgroup = MEINEDOMAIN
Schritt 2 – Domäne anbinden und Service-Keys erstellen
Ist die Konfiguration der Dienste an die eigene Umgebung angepasst, kann schon die erste Kerberos-Anmeldung erfolgen, es sollte ein Ticket Granting Ticket (TGT) ausgestellt werden, mit dem man in die Lage versetzt wird, weitere Tickets für andere Dienste anzufordern:
# kinit Administrator Password for Administrator@MEINEDOMAIN.LOCAL: # _
„klist“ sollte nun eine Ausgabe wie folgt generieren:
# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: Administrator@MEINDOMAIN.LOCA Valid starting Expires Service principal 02/11/13 20:08:45 02/12/13 06:09:16 krbtgt/MEINEDOMAIN.LOCAL@MEINEDOMAIN.LOCAL renew until 02/12/13 20:08:45 # _
Der Beitritt des Servers in die Domäne ist ähnlich simpel:
# net ads join -U Administrator Using short domain name -- MEINEDOMAIN Joined 'meinserver' to realm 'MEINEDOMAIN.LOCAL' # _
Das ermöglicht nun die lezte Vorbereitung vor der Einrichtung des Webservers, die Erstellung eines Service-Keys für den httpd:
# net ads keytab add HTTP -U Administrator Processing principals to add... Enter Administrator's password: # _
Nach der Eingabe des Passwortes für den Domänen-Admin sollte nun eine fertige und für den geplanten Zweck nutzbare krb5.keytab unter /etc liegen. Da der Apache-Prozess die Keytab später benötigt, müssen die Zugriffsrechte auf die Datei noch ein klein wenig erweitert werden:
# chgrp www-data /etc/krb5.keytab # chmod g+r /etc/krb5.keytab
Und damit kommen wir zum abschließenden:
Schritt 3 – Einrichtung der Apache-Konfiguration
Um für eine Website nun die Kerberos-Anmeldung zu erzwingen, muss deren Konfigurationsdatei erweitert werden, hier ein einfaches Beispiel:
# /etc/apache2/sites-enabled/sicheresite <VirtualHost *:80> ServerName sicheresite.meinedomain.local ServerAdmin administrator@meinedomain.local DocumentRoot /var/www/websites/sicheresite/html <Directory /> Options FollowSymLinks AllowOverride None </Direcotry> <Directory /var/www/websites/sicheresite/html> Options -Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <Location /> AuthType Kerberos AuthName Login KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms MEINEDOMAIN.LOCAL Krb5KeyTab /etc/krb5.keytab require valid-user </Location> </Virtualbost>
Wichtig ist hier der Bereich im Abschnitt Location. Hier wird die Anmeldung auf Kerberos umgestellt, die oben angelegte /etc/krb5.keytab zur Nutzung referenziert und jedem an der Domäne angemeldeten Benutzer der Zugriff auf die Webseite erlaubt.
Was sich so alles mit dem auth_kerb-Modul anstellen lässt, ist unter http://modauthkerb.sourceforge.net/configure.html nachzulesen.
Bevor es nun an’s Testen der neu eingerichteten Funktionalität gehen kann, sollte noch sichergestellt werden, dass das Modul auch geladen wird:
# a2enmod auth_kerb Enabling module auth_kerb. Run '/etc/init.d/apache2 restart' to activate new configuration! # apache2ctl restart # _
Fallstricke
Hier noch zwei kleine Stolperfallen, die man auf jeden Fall kennen sollte:
- Es muss sichergestellt sein, dass die Uhrzeit des Servers, auf dem der Apache läuft mit der des Domain-Controllers übereinstimmt. Hier könnte der ntpd helfen
- Die Browser, die einen Single-Sign-On durchführen sollen, müssen entsprechend eingestellt sein, beim Internet-Explorer beispielsweise muss die Option „Integrierte Windows Authentifzierung“ aktiviert werden.
Und nun: Happy Single Sign On