apache: Am ActiveDirectory authentifizieren

Den Weg Benutzer über .htaccess und .htpasswd beim apache Webserver zu authentifizieren ist hinlänglich bekannt.
Noch interessanter ist jedoch die Authentifizierung über ein Zentrales ActiveDirectory (oder einen beliebigen LDAP Server) – Und dabei ist es fast so einfach wie über die .htpasswd files.

Als erstes benötigt man das modul yum install mod_ldap:

yum install mod_ldap

Danach erstellt man im zu schützenden Web-verzeichnis einfach eine Datei mit dem Namen .htaccess und folgendem Inhalt:

# Username to bind
AuthLDAPBindDN "CN=unprivilegierter-user,OU=User Accounts,DC=ad,DC=example,DC=net"
AuthLDAPBindPassword "xxxxxx"
 
# search for users
AuthLDAPURL "ldap://ad.example.net/OU=User Accounts,DC=ad,DC=example,DC=net?sAMAccountName?sub?(objectClass=*)"
 
AuthType Basic
AuthName "WINDOWS ACCOUNT LOGIN"
AuthBasicProvider ldap
 
# Important, otherwise "(9)Bad file descriptor: Could not open password file: (null)"
AuthUserFile /dev/null
require valid-user
Hinweis bei der Verwendung von SSL (ldaps://)

Verwendet man SSL, also als AuthLDAPURL beispielsweise: ldaps://ad.example.net/, muss man im apache in der Server Konfiguration das checken des CA-Zertifikats deaktivieren, z.B. mit der folgenden Zeile in: /etc/httpd/conf.d/ldap.conf:

LDAPVerifyServerCert Off

Alternativ kann man auch das CA-Zertifikat vom LDAP-Server auf den Webserver kopieren (z.B. nach: /etc/openldap/certs/ldap_ca.crt und dann in: /etc/httpd/conf.d/ldap.conf anstelle von: LDAPVerifyServerCert Off die Option:

LDAPTrustedGlobalCert CA_BASE64 "/etc/openldap/certs/samba_ca.crt"

einfügen.

Die einzelnen Anweisungen bedeuten folgendes:

  • AuthLDAPBindDN: Dies ist der DN eines unprivilegierten users; da man beim ActiveDirectory nur schon einen user braucht um andere user zu suchen. 😉
  • AuthLDAPBindPassword: Das Passwort für diesen (system-) user
  • AuthLDAPURL: Die URL für die Domain Suche (muss mindestens ein Unterverzeichnis (OU) enthalten!)

Der Rest entspricht den Standard Apache-Authentifizierungs Konfigurationen.

mod_ldap debuggen

Falls bei mod_ldap etwas nicht funktioniert, erhält man nicht mehr als einen HTTP 500 Fehler im apacher error.log und mit dieser Info lässt sich leider nicht so viel anfangen.
Glücklicherweise gibt es die Option: LDAPLibraryDebug, welche man in der Server-Konfiguration, beipspielsweise mit der folgenden Zeile in: /etc/httpd/conf.d/ldap.conf hinzufügen kann:

LDAPLibraryDebug 7

Nach einem restart des apache servers steht dann die ganze LDAP connection info im error.log.

Hinweis: Auch SELinux kann in diesem Kontext für Probleme verantwortlich sein.

Quellen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.