Die meisten werden es kennen: Wo man sich auch immer in der IT-Landschaft bewegt benötigt man Zugangsdaten. Vielerorts sind diese noch nicht vereinheitlicht (Stichwort Single-Sign-On, Kerberos etc.) – Administratoren wie Endbenutzer müssen sich eine Vielzahl von Benutzernamen und Passwörtern merken, um der täglichen Arbeit nachzugehen.
Wenn wie bei mir auf der Arbeit hingegen bereits ein von einer anderen Einheit betriebenes LDAP-Verzeichnis besteht, kann man dieses bei der Bewirtschaftung von Web-Applikationen zur Benutzer-Authentifizierung und -Authorisierung hinzuziehen.
In der hier vorliegenden Anleitung erläutere ich, wie Web-Verzeichnis gegen unbefugten Zugriff geschützt werden. Zum Einsatz kommen Debian und Apache 2.2 – ich gehe davon aus, dass beides bereits ordnungsgemäss installiert und konfiguriert wurde.
OpenLDAP & Hilfsprogramme installieren
Als erstes installiert man OpenLDAP sowie die ldap-utils mit einigen nützlichen Hilfsprogrammen:
apt-get install slapd apt-get install ldap-utils
OpenLDAP lässt man aber unkonfiguriert, denn ein aktiver LDAP-Server befindet sich ja bereits im Netzwerk und versieht seinen Dienst.
Anschliessend passt man die Konfiguration von OpenLDAP an:
$ cat /etc/ldap/ldap.conf BASE o=org,c=ch URI ldaps://ldap.domain.tld TLS_CACERTDIR /etc/ldap/cacerts TLS_REQCERT never
SSL-Zertifikate
In unserem Falle reichte es, in /etc/ldap einen Symlink auf /etc/ssl/certs einzurichten. Der LDAP-Server verwendet ein Standard-Zertifikat von CyberTrust, welches bei Debian schon von Beginn weg dabei ist (?).
Bei einer frischen Debian-Installation (4.0r3) existiert dieses Verzeichnis nicht; Zertifikate sind auf dem System standardmässig keine vorhanden. Zuerst gilt es nun also, das Zertifikat des Servers herauszufinden:
openssl s_client -connect ldap.domain.tld:636 -showcerts
Anhand dieser Angaben sucht man über Google nach dem „<anbieter> global root“ des Anbieters (bspw. Cybertrust) und gelangt so normalerweise sofort zu den gesuchten Information. In meinem Fall war es:
Dieses Zertifikat laden wir uns herunter und legen es im Verzeichnis /etc/ldap/cacerts ab.
Anstelle in der ldap.conf explizit ein Zertifikat anzugeben, überlassen wir es OpenLDAP, das richtige Ding zu eruiren. Das klappt natürlich nur, wenn der Sysadmin des LDAP-Servers nicht selbst ein Zertifikat gebastelt hat.
Testlauf
Um zu überprüfen, ob OpenLDAP korrekt konfiguriert wurde, lässt man eine erste Abfrage laufen:
$ ldapsearch -x "uid=maeby" # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: uid=maeby # requesting: ALL # # maeby, suborg, org, ch dn: ... objectClass: top objectClass: person objectClass: posixAccount objectClass: shadowAccount objectClass: ... objectClass: ... objectClass: ... uid: maeby shadowFlag: 1 description: temporary staff account, imported from domain homeDirectory: /home/maeby uidNumber: 0001 gidNumber: 0010 cn: Mario Aeby loginShell: /bin/bash # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Wenn dies klappt, geht es zum nächsten Schritt:
Apache 2.2 konfigurieren
Als erstes aktiviert man die zwei LDAP-Module:
$ cd /etc/apache2/mods-enabled ln -s ../mods-available/ldap.load ln -s ../mods-available/authnz_ldap.load
Es empfiehlt sich, einen LDAP-Cache einzurichten. Im selben Verzeichnis (/etc/apache2/mods-enabled) erstellt man deshalb eine Datei ldap.conf mit folgendem Inhalt:
$ cat /etc/apache2/mods-enabled/ldap.conf # Enable the LDAP connection pool and shared # memory cache. Enable the LDAP cache status # handler. Requires mod_ldap and mod_auth_ldap LDAPSharedCacheSize 2000000 LDAPCacheEntries 1024 LDAPCacheTTL 28800 LDAPOpCacheEntries 1024 LDAPOpCacheTTL 28800 # specify shared memory file, to activate cache LDAPSharedCacheFile /var/cache/apache2/ldap.cache
Web-Verzeichnisse schützen
Das Vorgehen ist ähnlich zu einer Authentifikation über eine htpasswd-Datei, abgesehen davon dass man einige andere Befehle einsetzt:
$ cat .htaccess AuthType Basic AuthName Test AuthLDAPURL "ldaps://ldap.domain.tld/o=org,c=ch?uid" AuthzLDAPAuthoritative on AuthBasicProvider ldap Require ldap-user maeby bgates sjobs
Anstelle Benutzer kann man auch Gruppen spezifizieren – oder gar spezielle Filter mitgeben, die erfüllt sein müssen.