Kerberos: Apache per MOD_AUTH_KERB authentifizieren

Hallo Freunde der Sonne,

in diesem Beitrag geht es um die Nutzung von Kerberos bei der Authentifizierung mit Apache.

Active Directory Stichwörter: adsiedit, SPN, UPN (ggf. Mal nachschlagen)
Und los gehts…

Kerberos: Apache per MOD_AUTH_KERB authentifizieren

Zielsetzung des Artikels:
Ziel ist es, dass ein Benutzer per Kerberos ohne Eingabe eines Logins für die Website authentifiziert wird. (automatische Identifizierung des Benutzers ohne Login)

Klärung der Ausgangsposition:

  • CentOS welches Mitglied im Active Directory ist (CentOS 6.5 im Beispiel)
  • Kerberos/Winbind inkl Keytab-Default eingerichtet
    (siehe Kerberos: Integration Linux in Active Directory)
  • Installierter httpd – Apache (im Beispiel bereits per yum installiert)
  • Apache in den iptables freigegeben
  • SSL-Zertifikat für den Apache eingerichtet
  • ggf. SELINUX deaktiviert

Schritt 1: Installation der Kerberos-Authentifizierung für Apache

yum install mod_auth_kerb

Schritt 2: Klärung Hostname – Authentifizierung per Kerberos
In diesem Schritt werden die SPN/UPN, die Keytab-Dateien für eine Verwendung von Kerberos im Aapche vorbereitet.

Begriffserklärung:

  • SPN – Service Principal Name
    (Dienstname, multiples Attribut eines AD-Objekts – Computer/Benutzer)
  • UPN – User Principal Name
    (Objektname, eindeutiges Attribut eines AD-Objekts – Computer/Benutzer)
  • Keytab – Schlüsseltabelle (Datei die Verbindungsdaten für Kerberos speichert)
  • Hostname – Name des Servers/VM (wird für Authentifizierung gegen AD herangezogen)
  • vHost – DNS-name, Konfiguration einer Website (DNS-Name mit zugehöriger Website)

Zusammensetzung einer SPN

<SERVICE>/<DNS>@<DOMAIN>.<TLD> = Dienst / Server @ Kerberos-Domäne

Beispiel:
HTTP/server.domain.tld@DOMAIN.TLD

Anwendung einer SPN im Gebrauch:
Dienst –  HTTP (Definition zur Kennzeichnung in den Apache-vHost-Einstellungen)
Server –  hostname/vHost-Name (falls vHosts verwendet werden, wird deren DNS-Name verwendet)
Kerberos-Domäne – Bindung des Servers an eine Domäne (Active Directory)

Ablauf der Einrichtung folgend:
3. Einrichtung der Authentifizierung via Kerberos im Apache
4. Hinzufügen bzw. Anpassen der SPN/UPN im Active Directory
5. Generierung des Keytab für Apache

Schritt 3: Einrichtung der Authentifizierung via Kerberos im Apache
Bitte öffnen Sie die Konfiguration des vHost/Apache und fügen Sie im entsprechenden Directory folgende Art der Authentifizierung ein:

# Kerberos
AuthType Kerberos
AuthName „Kerberos Login“
KrbMethodNegotiate On
KrbMethodK5Passwd Off
KrbAuthRealms <DOMAIN>.<TLD>
KrbVerifyKDC on
Krb5KeyTab /etc/krb5.keytab
KrbSaveCredentials off


KrbServiceName HTTP


Require valid-user

Folgende Zeile legt hierbei den Service des SPN fest:

KrbServiceName HTTP

Die alternative Authentifizierung per Kennwort wird durch folgende Zeile für den Test abgeschaltet:

KrbMethodK5Passwd Off

Folgende Zeile aktiviert die eigentliche Authentifizierung per Token:

KrbMethodNegotiate On

Weiter geht es mit der Einrichtung der SPN/UPN auf dem Domänen-Controller…

Schritt 4: Hinzufügen bzw. Anpassen der SPN/UPN im Active Directory
Bitte melden Sie sich an einem Ihrer Domänen-Controller an und öffnen Sie die Verwaltungskonsole „Active Directory-Benutzer und -Computer“ mit erweiterten Eigenschaften oder „ADSIEDIT“ im Standkontext.

Abbildung 1: Active Directory-Benutzer und -Computer

SPN – servicePrincipalName:

HTTP/<FQDN>@<DOMAIN>.<TLD>
HTTP/<hostname>@<DOMAIN>.<TLD>
HTTP/<vHosts>@<DOMAIN>.<TLD>
host/<FQDN>@<DOMAIN>.<TLD>
host/<hostname>@<DOMAIN>.<TLD>
host/<vHosts>@<DOMAIN>.<TLD>

UPN – userPrincipalName:

host/<hostname>@<DOMAIN>.<TLD>

Überprüfung der Einstellungen per CMD:

Zum überprüfen des AD auf Doppelungenbei den SPN:

setstpn -X

Abfrage eines SPN – Ausgabe beihaltet gebundetenes Objekt

setspn -q HTTP/<hostname>@<DOMAIN>.<TLD>

Weiter geht es mit der Erstellung des Keytab unter CentOS und dem zuordnen von Dienstnamen.

Schritt 5:  Generierung des Keytab für Apache
Folgendes Tool leistet uns unter RHEL/Fedora/CentOS gute Arbeit wenn es um Interaktionen mit dem AD/LDAP geht:

Wiederholter Beitritt im AD:

net ads join -U Administrator

Erstellen eines Keytab:

net ads keytab create -U Administrator

Hinzufügen eines weiteren Dienstnamen für den Host:

net ads keytab add HTTP

Zur Überprüfung ob alle möglichen Dienste/Namen hinterlegt sind (ggf. Keytab anpassen):

klist -k -t /etc/krb5.keytab

Irgendwie einfach oder?
Alternativ kann man diese Keytabs jedoch auch vo einem Domänen-Controller per „ktpass“ erstellen lassen. Dies könnte interessant sein, wenn für alternative vHosts ein Benutzer im AD angelegt wurde, der die passenden SPN/UPN für die Website bereitstellt. Leider gibt es bei der Erstellung via „ktpass“ einen kleinen Haken – es muss ein Passwort gesetzt werden – in diesem Falle wäre es unpraktisch, da sich der Server/VM schon mit dem Computerkonto verbunden hat.

Beispiel für ktpass:

Unter einer CMD am Domänen-Controller auszuführen:
 

ktpass /princ host/<FQDN>@<DOMAIN>.<TLD> /mapuser <USER/COMPUTER> /pass <Kennwort> /out <Path><Name>.keytab /crypto all /ptype KRB5_NT_PRINCIPAL /mapop set

Schritt 6: Testlauf/Verifizierung
Unter dem CentOS würde ich das Keytab vorher noch auf die Probe stellen, ob wir uns hiermit auch wirklich gegen das AD per Kerberos authentifizieren können.

kinit -V host/<Hostname/FQDN> -k -t /etc/krb5.keytab

Wenn alles geklappt hat, sollte nun folgendes zurückgemeldet werden:

Using keytab: /etc/krb5.keytab
Authenticated to Kerberos v5

Der nächste Testlauf startet mit dem Browser. ;)