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