Authentifizierung und Authentisierung

Authentifizierung und Authentisierung erfolgen primär über die vorgestellte zpub-eigene Benutzerverwaltung. Es ist jedoch auch möglich, die in zpub verwendeten Komponenten (hier: apache und subversion) z.B. gegen einen LDAP-Verzeichnisdienst authentifizeren zu lassen oder Single Sign-On einzurichten.

LDAP

Auf dem Verzeichnisdienst muss ein Abfrage-User (hier: apacheconnect) eingerichtet sein.

Aapche-Module:

a2enmod authnz_ldap ldap

Beispiel 3. /etc/apache2/mods-enabled/ldap.conf

LDAPVerifyServerCert Off|On

Beispiel 4. vhost.conf (Ausschnitt)

AuthType Basic
AuthBasicProvider ldap file
AuthUserFile /var/lib/zpub/${instance-name}/settings/htpasswd
AuthLDAPURL ldaps://dc1.domain.tld:636/dc=domain,dc=tld\
    ?sAMAccountName?sub?(objectClass=*)
AuthLDAPBindDN apacheconnect@domain.tld
AuthLDAPBindPassword geheim
Require ldap-group ou=zpubgruppe,DC=domain,DC=tld

Die LDAP-Abfragen können mit ldapsearch aus dem Debian-Paket 'ldap-utils' getestet werden:

$ ldapsearch -x -D "apacheconnect@domain.tld" -w geheim -b "dc=domain,dc=tld" \
    -H "ldaps://dc1.domain.tld:636" "(sn=apacheconnect)" dn

Single sign-on (Kerberos)

Anmerkung

Die Zeit muss auf allen beteiligten Hosts korrekt gestellt sein. Weiter ist auf eine korrekte Namensauflösung (DNS-Lookup wie auch Reverse-DNS-Lookup) sowie auf die korrekte Klein- und Großschreibung für die Kerberos-Konfiguration zu achten.

Anmerkung

Alle Angaben beziehen sich auf die Realisierung der Authentifizierung und Authentisierung gegen ein Microsoft Active Directory™ bzw. folgende Umgebung:

  • Domain Controller: Windows Server 2012R2

  • HTTP Service: Apache 2.4/Debian 8.x

  • Client: Microsoft Windows 7

Anmerkung

Bei der Nutzung von Kerberos ist keine "fallback"-Authentifizierung durch andere Authentifizierungs-Provider (z.B. file) möglich.

  1. Host AD: Erstellen eines Service Principals im Active Directory: Neuer Benutzer anlegen

    Anzeigename
    Kerberos Service Principal
    Benutzeranmeldename
    HTTP/$zpub-instance-name.domain.tld
    Kontooption
    Kennwort läuft nie ab
    Kontooption
    Dieses Konto unterstützt Kerberos-AES-256-Bit-Verschlüsselung
  2. Host AD: keytab für diesen Service Principal erstellen

    C:\>ktpass -princ HTTP/$zpub-instance-name.domain.tld@DOMAIN.TLD \
      -mapuser kerberosprinc@DOMAIN.TLD \
      -crypto AES256-SHA1 -ptype KRB5_NT_PRINCIPAL \
      -pass not_be_guessable -out c:\keyfile

    Anmerkung

    Der Name Service Principal, sprich der Teil zwischen dem HTTP/ und dem @DOMAIN.TLD, muss exakt auf den FQDN des zu "kerberisierenden" Hosts lauten.

  3. Host zpub: keytab-Datei auf zpub-Host übertragen und Dateisystemberechtigungen anpassen:

    $ chown www-data http_zpub.krb5keytab
    $ chmod  400 http_zpub.krb5keytab 
  4. Host zpub: LDAP-Konfiguration

    /etc/ldap/ldap.conf:

    BASE    dc=domain,dc=tld
    URI     ldap://dc1.domain.tld
  5. Host zpub: Kerberos-Konfiguration

    /etc/krb5.conf:

    [libdefaults]
        default_realm = DOMAIN.TLD
    
    [realms]
        DOMAIN.TLD = {
            kdc = dc1.domain.tld
            admin_server = dc1.domain.tld
            default_domain = domain.tld
         }
     
    [domain_realm]
        .domain.tld = DOMAIN.TLD
        domain.tld = DOMAIN.TLD
  6. Host zpub: Testen von Ticket und Keytab-Datei:

    $ kinit -k -t http_zpub.krb5keytab  HTTP/$zpub-instance-name.domain.tld
    $ kvno  HTTP/$zpub-instance-name.domain.tld@DOMAIN.TLD
    $ klist -e
    $ klist -e -k -t http_zpub.krb5keytab

    Drei Angaben müssen jeweils übereinstimmen:

    1. kvno

    2. principal name

    3. encryption type

    Die zum Testen erstellen Tickets sollten wieder gelöscht werden:

    $ kdestroy
  7. Host zpub: apache-Module aktivieren:

    $ a2enmod auth_kerb ldap authnz_ldap
  8. Host zpub: apache konfigurieren:

    AuthName "zpub single Sign On"
    AuthType Kerberos
    KrbAuthRealms DOMAIN.TLD
    KrbServiceName HTTP/${zpub-instance-hostname}.domain.tld@DOMAIN.TLD
    Krb5Keytab /etc/apache2/http_${zpub-instance-hostname}.krb5keytab
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    KrbAuthoritative off
    KrbLocalUserMapping on
    #KrbVerifyKDC off
    #KrbSaveCredentials on
    
    AuthBasicProvider ldap
    AuthLDAPURL ldap://dc1.domain.tld:3268/dc=domain,dc=tld?\
        sAMAccountName?sub?(objectClass=*)
    AuthLDAPBindDN apacheconnect@DOMAIN.TLD
    AuthLDAPBindPassword not_be_guessable
    
    <RequireAll>
        Require ldap-group CN=zpub,DC=domain,DC=tld
    </RequireAll>
    
  9. Client: Webbrowser für SSO konfigurieren:

    Firefox: network.negotiate-auth.trusted-uris: domain.tld

    IE: Host zu Trusted Sites hinzufügen