Apache 2 mit LDAP/AD Authentifikation

Aus Wiki
Wechseln zu: Navigation, Suche

Es wird noch an der Formulierung gearbeitet, aber so wie es steht, funktioniert es bereits schon.

Apache Module aktivieren

a2enmod authnz_ldap


Apache Konfiguration

Unter Directory oder Location fügt man diese Zeilen hinzu, und passt es nach seiner Umgebung an.[1] [2]

        AuthzLDAPAuthoritative off
        AuthName "AD/LDAP Authentifikations Test"
        AuthBasicProvider ldap
        AuthType Basic
        AuthLDAPGroupAttribute member
        AuthLDAPGroupAttributeIsDN On
        AuthLDAPURL "ldap://192.168.0.221:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
        AuthLDAPBindDN "web1@ad.example.com"
        AuthLDAPBindPassword "Geheim"
        Require valid-user

Achtung: Ab Apache2.4 muss AuthzLDAPAuthoritative off deaktiviert / entfernt werden, da es dies nicht mehr gibt.[3]

Falls man möchte, dass nur eine bestimmte Gruppe zugriff hat.

Muss man die Require valid-user gegen Require ldap-group <dn-String> austauschen.

Require ldap-group cn=du-darst-gruppe,cn=Users,dc=ad,dc=example,dc=com

Um mehr als nur einen AD/LDAP Server zu verwenden (falls mal einer Ausfällt), gibt man den zusätzlichen Server in der Zeile AuthLDAPURL so an.

AuthLDAPURL "ldap://192.168.0.221:3268 192.168.0.241:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"

Es geht auch mit DNS Namen.

AuthLDAPURL "ldap://authsrv1.ad.example.com:3268 authsrv2.ad.example.com:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"

Als Beispiel die Komplette Konfig. mit der funktion, dateien Anzeigen zu lassen.

Apache 2 - 2.2

<VirtualHost *>
        ServerAdmin webmaster@example.com
        ServerName ldaptest.example.com
        ServerAlias ldaptest.example.com *.ldaptest.example.com
        DocumentRoot /var/www/ldaptest

<Directory /var/www/ldaptest/>
        AllowOverride None
        Options FollowSymLinks +Indexes
        AuthzLDAPAuthoritative off
        AuthName "AD/LDAP Authentifikations Test"
        AuthBasicProvider ldap
        AuthType Basic
        AuthLDAPGroupAttribute member
        AuthLDAPGroupAttributeIsDN On
        AuthLDAPURL "ldap://192.168.0.221:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
        AuthLDAPBindDN "web1@ad.example.com"
        AuthLDAPBindPassword "Geheim"
        Require valid-user

</Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Apache 2.4[3]

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName ldaptest.example.com
        ServerAlias ldaptest.example.com *.ldaptest.example.com
        DocumentRoot /var/www/ldaptest

<Directory /var/www/ldaptest/>
        AllowOverride None
        Options FollowSymLinks +Indexes
        AuthName "AD/LDAP Authentifikations Test"
        AuthBasicProvider ldap
        AuthType Basic
        AuthLDAPGroupAttribute member
        AuthLDAPGroupAttributeIsDN On
        AuthLDAPURL "ldap://192.168.0.221:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
        AuthLDAPBindDN "web1@ad.example.com"
        AuthLDAPBindPassword "Geheim"
        Require valid-user

</Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


Apache 2.4

Man könnte aber auch die LDAP/AD spezifische Konfiguration in eine eigene conf unter apache2/conf-available legen.

Somit hat man den Vorteil die conf in die jeweiligen VHosts zu laden und bei einer änderung dies nur einmal machen zu müssen.

Unter apache2/conf-available erstellen wir eine Datei mit dem Namen ldap-auth-example.conf und dem Inhalt:

AuthName "AD/LDAP Authentifikations Test"
AuthBasicProvider ldap
AuthType Basic
AuthLDAPGroupAttribute member
AuthLDAPGroupAttributeIsDN On
AuthLDAPURL "ldap://192.168.0.221:3268/dc=ad,dc=example,dc=com?sAMAccountName?sub?(objectClass=*)"
AuthLDAPBindDN "web1@ad.example.com"
AuthLDAPBindPassword "Geheim"
Require valid-user

Alles was man in dieser conf weglässt, muss man in der VHost hinzufügen.

In der VHost Konfiguration, ersetzt man den LDAP/AD Part mit Include conf-available/ldap-auth-example.conf.

Zum Verständnis, die ganze Konfiguration angepasst.

<VirtualHost *:80>
        ServerAdmin webmaster@example.com
        ServerName ldaptest.example.com
        ServerAlias ldaptest.example.com *.ldaptest.example.com
        DocumentRoot /var/www/ldaptest

<Directory /var/www/ldaptest/>
        AllowOverride None
        Options FollowSymLinks +Indexes
        Include conf-available/ldap-auth-example.conf
</Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Möchte man die Zugriffe Individuell machen, entfernt man Require valid-user von der ldap-auth-example.conf und fügt es in der VHost Konfiguration unter Include hinzu.

Somit könnte man individuelle Gruppen definieren, aber dennoch mit nur einer ldap-auth-example.conf.

Quellen

  1. Serverfault: Unable to authenticate using Apache and authnz_mod_ldap in Active Directory
  2. Apache 2 Documents: Mod Authnz LDAP
  3. 3,0 3,1 Apache 2.4 Documents:Mod Authnz LDAP