04Jul
Web Authentifizierung mit Kerberos
Neben der Basic Authentifizierung über eine htaccess Zugriffsverwaltung für Seitenzugriffe, will ich eine Methode mittels Kerberos vorstellen. Hierbei wird über einen zentral verwalteten Kerberos Server bestimmte Webseiteninhalte für Personen administriert.Schematischer Aufbau
In diesem Beispiel habe ich einem Apache Webserver unter Debian aufgesetzt. In diesem Testaufbau lautet die Windows Domäne OUTBACK. Zudem existiert in dem Netzwerk ein Windows Server 2012 R2 als Domain Controller. In der ersten Phase wird beim Login vom Key Distribution Center (KDC) ein Ticket Granting Ticket (TGT) angefordert. Dies geschieht in der Regel immer dann, wenn der Benutzer sich mit seinem Rechner an eine Windows Domäne anmeldet. Dieses Ticket ist dem eines Mastertickets vergleichbar, indem die Authentität eines Benutzers beglaubigt wird. Wenn der Benutzer nun ein Service, wie in diesem Beispiel eine Apache Webseite, benutzen will, muss der Client speziell für diesen Service ein sogenanntes Ticket Granding Service (TGS) mit seinem schon zugewiesen TGT generieren.Installation benötigter Komponenten
In diesem Aufbau müssen folgende Pakete auf einem grundinstallierten Raspbian (Debian Distribution) installiert werden:
1 |
apt-get install krb5-kdc krb5-admin-server apache2 libapache2-mod-auth-kerb |
Konfiguration von Kerberos auf dem Webserver
Als erstes muss die Kerberos Konfiguration wie folgt angepasst
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[libdefaults] default_realm = OUTBACK [realms] OUTBACK = { kdc = dc1.outback kdc = dc2.outback admin_server = dc1.outback } [domain_realm] .outback = OUTBACK [logging] kdc = FILE:/var/log/krb5/krb5kdc.log admin_server = FILE:/var/log/krb5/kadmind.log default = SYSLOG:NOTICE:DAEMON |
1 |
kinit -VV melzer@outback |
1 2 3 4 |
Using new cache: :/run/user/0/krb5cc/tkthuIrJH Using principal: melzer@OUTBACK Password for melzer@OUTBACK: ****** Authenticated to Kerberos v5 |
Server Keytab am Domain Controller
Damit der Webserver als Host und Service sich nicht immer mit einem Passwort am KDC Authentifizieren muss, wird ein keytab Datei (Passwortdatei) am Domain Controller erstellt. Hierbei wird die Passwortdatei an den AD Benutzerkonto kerberosuser angebunden. Als Principal Name definierte Host und Service wird als <SERVICE>/<FQDN>@<Domäne> beschrieben.
1 |
ktpass -princ HTTP/raspberry.outback@OUTBACK -mapuser kerberosuser@outback -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -mapop set -pass XXXXX -out c:\TEMP\keytab_for_raspberry |
1 2 3 4 5 6 7 |
Targeting domain controller: windows.OUTBACK Successfully mapped HTTP/raspberry.outback to kerberosuser. Password successfully set! Key created. Output keytab to c:\TEMP\keytab_for_raspberry: Keytab version: 0x502 keysize 75 HTTP/raspberry.outback@OUTBACK ptype 1 (KRB5_NT_PRINCIPAL) vno 5 etype 0x17 (RC4-HMAC) keylength 16 (0x71759c927b4f62f134f9e20511dba7b1) |
1 |
kinit -VV -k -t /etc/apache2/keytabs/keytab_for_raspberry HTTP/raspberry.outback@OUTBACK |
1 2 3 4 |
Using new cache: :/run/user/0/krb5cc/tktsFVM3C Using principal: HTTP/raspberry.outback@OUTBACK Using keytab: /etc/apache2/keytabs/keytab_for_raspberry Authenticated to Kerberos v5 |
Anpassung Apache Konfiguration
Damit Apache nun Kerberos als Authentifizierungmethode verwendet, muss die Konfigurationsdatei wie folgt angepasst werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
… LoadModule auth_kerb_module /usr/lib64/apache2/mod_auth_kerb.so … <Directory "/"> AllowOverride None Options +ExecCGI -Includes Order allow,deny allow from all AuthType Kerberos AuthName "Kerberos SSO" KrbAuthRealms OUTBACK KrbServiceName HTTP/raspberry.outback@OUTBACK Krb5Keytab /etc/apache2/keytabs/keytab_for_raspberry KrbMethodNegotiate on KrbMethodK5Passwd on KrbLocalUserMapping on require valid-user … |
Testen mit PHP
Zum Testen der Authentifizierung können folgende PHP Zeilen verwendet werden.
1 2 3 4 |
<?php echo "Authentication: " . $_SERVER['AUTH_TYPE'] . "<br />"; echo "User: " . $_SERVER['REMOTE_USER'] . "<br />"; ?> |
Tags:Apache, Authentifizierung, Kerberos, Linux