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. ;)
