Active-Directory, Linux und Kerberos Keytabs (HOWTO)

Alle Informationen welche du brauchst um für einen ActiveDirectory Account einen Kerberos Keytab zu generieren, kannst du per LDAP aus dem ActiveDirectory abholen.

Die Befehle  beziehen sich auf RHEL/CentOS 7. Funktionieren vermutlich aber auch auf anderen Distributionen (andere Pfade, andere Paketnamen, ...)

Vorbereitung


Nehmen wir an, du hast einen myhttp-service  Account in der ad.dom.ain Domäne.

  • krb5-workstation: kinit, ktutil etc. - Kerberos Tools
  • cyrus-sasl-gssapi: Library für Kerberos Anmeldung via LDAP (unter anderem)
  • openldap-clients: ldapsearch und Co.
  • mod_auth_gssapi: Apache Modul für Kerberos Authentifizierung

yum install  krb5-workstation \
  cyrus-sasl-gssapi \
  openldap-clients \
  mod_auth_gssapi

# basis krb5.conf
cat - >/etc/krb5.conf <<EOF
[libdefaults]
        default_realm = AD.DOM.AIN
        dns_lookup_realm = false
        dns_lookup_kdc = true
EOF


# eine basic ldap.conf
cat - >/etc/openldap/ldap.conf <<EOF
BASE   dc=ad,dc=dom,dc=ain
URI    ldap://ad.dom.ain

# prüfe das Server-Zertifikat nicht

# (natürlich nur zum Testen!!!)
TLS_REQCERT     allow

# Turning this off breaks GSSAPI used 

# with krb5 when rdns = false
SASL_NOCANON    on

EOF


Informationsbeschaffung

kinit myhttp-service

ldapsearch -Y GSSAPI \
  -Q -LLL \
  -h ldaps://ad.dom.ain \
  -O maxssf=0 \
  sAMAccountName=myhttp-service \
  userPrincipalName \
  servicePrincipalName \
  msDS-KeyVersionNumber \
  msDS-SupportedEncryptionTypes



Erstellen vom Keytab

Jetzt muss du einfach für den userPrincipalName und jeden servicePrincipalName und jeden msDS-SupportedEncryptionType einmal addent im ktutil ausführen.
Der msDS-SupportedEncryptionType musst zu zuerst noch übersetzen in den  Encryption-Type (aka enctype):
  • 1: des-cbc-crc
  • 2: des-cbc-md5
  • 4: rc4-hmac
  • 8: aes128-cts-hmac-sha1-96
  • 16: aes256-cts-hmac-sha1-96
17 wäre des-cbc-crc und  aes256-cts-hmac-sha1-96, 31 wären alle. Wenn es nicht vorhanden ist, ist es 7 (1,2,4).

Der ktutil Befehl sieht dann ungefähr so aus für ein /etc/httpd.keytab Keytab (ohne die Zeilenumbrüche mit \):

$> ktutil
ktutil: addent -password -p $userPrincipalName \

  -k $msDS-KeyVersionNumber \
  -e $enctype
Password for $userPrincipalName: $passwortWieBeiKinit
ktutil: addent -password -p $servicePrincipalName \

  -k $msDS-KeyVersionNumber \
  -e $enctype
Password for $servicePrincipalName:  $passwortWieBeiKinit
ktutil: wkt /etc/httpd.keytab

ktutil: quit

Apache einrichten

mit dem mod_auth_gssapi Modul, z.B. in /etc/httpd/conf.d/gssapi_auth.conf speichern:

<Location /> 
  AuthType GSSAPI 
  AuthName "GSSAPI Single Sign On Login" 
  GssapiCredStore keytab:/etc/httpd.keytab 
  Require valid-user
</Location>

Nicht vergessen: 
chmod 0640 /etc/httpd.keytab && chgrp apache /etc/httpd.keytab

Referenzen

Beliebte Posts aus diesem Blog