Konfiguration von LDAP - Apache 2.0.54

Das Problem

Sie möchten Apache mit LDAP compilieren. Sie stellen fest, daß der "configure" problemlos durchläuft.
./configure --prefix=/www/servers/apache2.0.54 --enable-mods-shared=all
Auch der "make" läuft in diesem Fall problemlos durch. Nur fehlt am Ende das entsprechende "mod_ldap".
In der Dokumentation steht nur, daß wenn nicht alle Vorraussetzungen für das Bilden der Module gegeben ist, das Modul übersprungen wird.
Dies wird klar, sobald man die benötigten Module separat angibt:
./configure --prefix=/www/servers/apache2.0.54 \
--enable-mods-shared=all \
--enable-ldap=shared \
--enable-auth-ldap=shared
Nun bekommt man beim "make" folgenden Fehler:
Building shared: mod_ldap.la mod_auth_ldap.la
/www/tmp/apache.src/httpd-2.0.54/srclib/apr/libtool --silent --mode=compile gcc
-g -O2 -pthread -D_POSIX_THREADS -DAP_HAVE_DESIGNATED_INITIALIZER -I/www/tmp/ap
ache.src/httpd-2.0.54/srclib/apr/include -I/www/tmp/apache.src/httpd-2.0.54/src
lib/apr-util/include -I/usr/local/include -I. -I/www/tmp/apache.src/httpd-2.0.5
4/os/unix -I/www/tmp/apache.src/httpd-2.0.54/server/mpm/prefork -I/www/tmp/apac
he.src/httpd-2.0.54/modules/http -I/www/tmp/apache.src/httpd-2.0.54/modules/fil
ters -I/www/tmp/apache.src/httpd-2.0.54/modules/proxy -I/www/tmp/apache.src/htt
pd-2.0.54/include -I/www/tmp/apache.src/httpd-2.0.54/modules/generators -I/www/
tmp/apache.src/httpd-2.0.54/server -I/usr/include/openssl -I/www/tmp/apache.src
/httpd-2.0.54/modules/dav/main -prefer-pic -c util_ldap.c && touch util_ldap.slo
util_ldap.c:43: #error mod_ldap requires APR-util to have LDAP support built in
*** Error code 1

Stop in /www/tmp/apache.src/httpd-2.0.54/modules/experimental.
*** Error code 1

Stop in /www/tmp/apache.src/httpd-2.0.54/modules/experimental (line 136 of /www
/tmp/apache.src/httpd-2.0.54/build/rules.mk).
*** Error code 1

Stop in /www/tmp/apache.src/httpd-2.0.54/modules (line 136 of /www/tmp/apache.s
rc/httpd-2.0.54/build/rules.mk).
*** Error code 1

Stop in /www/tmp/apache.src/httpd-2.0.54 (line 136 of /www/tmp/apache.src/httpd
-2.0.54/build/rules.mk).
*** Error code 1

Stop in /www/tmp/apache.src/httpd-2.0.54 (line 89 of /www/tmp/apache.src/httpd-
2.0.54/build/rules.mk).
Nun, die Apache 2 Doku ist hier ein wenig "spartanisch" und sagt lediglich das APR mit LDAP Unterstützung compiliert werden muß Die Versuche nun APR und APR-Util von der Apache.org Seite zu laden, mit LDAP zu compilieren und es dann erneut mit Apache 2 zu versuchen sind wahrscheinlich auch fehlgeschlagen. Nun ja, hier also des Rätsels Lösung.

Die Lösung

  1. Sie wollen also Apache 2 mit LDAP compilieren. Der Apache soll später im Verzeichnis /www/servers/apache-2.0.54 liegen
  2. Download des Apache Source und entpacken in einem Verzeichnis Ihrer Wahl (/tmp/http-2.0.54)
  3. Bilden Sie aus dem Apache 2 Source das APR:
    cd /tmp/httpd-2.0.54/srclib/apr
    ./configure --prefix=/www/servers/apache/2.0.54 --disable-ipv6
    make install
    	
  4. Bilden Sie aus dem Apache 2 Source das APR-Util mit LDAP Support:
    cd /tmp/httpd-2.0.54/srclib/apr-util
    
    ./configure \
    --prefix=/www/servers/apache/2.0.54 \
    --with-apr=/www/servers/apache/2.0.54 \
    --with-ldap-include=/www/servers/openldap2.2.18/include \
    --with-ldap-lib=/www/servers/openldap2.2.18/lib \
    --with-ldap=ldap \
    --with-berkeley-db=/usr/local/BerkeleyDB.4.2
    
    make install
    	
  5. Bilden Sie nun den Apache und verweisen Sie auf APR und APR-Util
    cd /tmp/httpd-2.0.54
    
    ./configure --prefix=/www/servers/apache/2.0.54 --enable-mods-shared=all \
    --enable-ldap=shared \
    --enable-auth-ldap=shared \
    --enable-ssl=shared \
    --with-apr=/www/servers/apache/2.0.54/bin/apr-config \
    --with-apr-util=/www/servers/apache/2.0.54/bin/apu-config
    
    make
    make install
    	
Das sollte es gewesen sein. Die compilation sollte jetzt fehlerfrei durchlaufen.


Konfigurationsbeispiel

Es bietet sich an, diverse Caching und Performance Einstellungen vorzunehmen:
<IfModule mod_ldap.c>
  LDAPSharedCacheSize 200000
  LDAPCacheEntries 1024
  LDAPCacheTTL 600
  LDAPOpCacheEntries 1024
  LDAPOpCacheTTL 600

  # Shared Memory File
  LDAPSharedCacheFile /var/lib/apache2/ldap.cache
</IfModule>
Eine LDAP Authentisierung wird dann wie folgt konfiguriert (z.B. in .htaccess):
AuthType Basic
AuthName "LDAP gesicherter Contentbereich"

# Authentifizierung per LDAP ein bzw. ausschalten
AuthLDAPEnabled on

# Entweder per ldap Schnittstelle (ldap bzw ldaps)
#AuthLDAPUrl ldap://127.0.0.1:389/dc=cybcon-industries,dc=de?uid?sub?(objectclass=inetOrgPerson)
# oder Unix-Sockel verwenden
AuthLDAPUrl ldapi:///dc=cybcon-industries,dc=de?uid?sub?(objectclass=inetOrgPerson)

# Authentifizierungsinformationen an andere Module weitergeben
AuthLDAPAuthoritative on

# Bind User mit dem sich der Apache am LDAP anmeldet um nach Benutzern und Gruppen zu suchen
AuthLDAPBindDN uid=apache2054,ou=technical-users,dc=cybcon-industries,dc=de
AuthLDAPBindPassword secret

# Diverse Standard Einstellungen
AuthLDAPCompareDNOnServer on
AuthLDAPGroupAttributeIsDN on
AuthLDAPRemoteUserIsDN off

# Attribut in der der gefundene User DN innerhalb einer LDAP Gruppe abgelegt ist (member, uniquemember)
AuthLDAPGroupAttribute uniqueMember

# Gruppe die Berechtigt sein soll auf den Bereich zuzugreifen
require group cn=admins,ou=groups,dc=cybcon-industries,dc=de


Per SSL an den LDAP

In einer größeren Umgebung ist normalerweise der LDAP Server durch Firewalls geschützt und befindet sich daher im DMZ Backend oder einer separaten Service-DMZ. Hier wird durch Sicherheitsvorschriften vorrausgesetzt, daß Benutzernamen und Passwörter nicht im Klartext über die Leitung gehen. Hier wird nun SSL eingesetzt. Das macht imho eigentlich auch nur Sinn, wenn der Webserver selbst die Webverbindung per SSL verschlüsselt.

Nun ist bei internen SSL Verbindungen nicht unbedingt ein Zertifikat einer öffentlichen Certificate Authority (CA) notwendig. Hier greifen Firmen meißt aus Kosten- und Flexibilitätsgründen auf eine eigene Certificate Infrastructure zurück.
Nun akzeptiert aber Apache (wie viele SSL Clients) ein Zertifikat von einer unbekannten CA nicht. Dies muß man Ihm erst beibringen um erfolgreich eine SSL Verbindung zu einem LDAP Server herstellen zu können.

Um eine SSL Verbindung zum LDAP Server herstellen zu können müssen Sie die komplette Certificate-Chain in eine Datei packen. D.h. alle Zertifikate der Ausstellenden CA's (für das LDAP Server Zertifikat) im PEM Format (Base64 Encoded) in einer Datei speichern. Diese Datei geben Sie im Apache dann wiefolgt an:
LDAPTrustedCAType BASE64_FILE
LDAPTrustedCA /etc/certs/cacert.pem
Nun müssen Sie nur noch in der Authentisierungs Konfiguration als AuthLDAPUrl als Protokoll "ldaps" angeben und den Port (Standard: 636) anpassen.
hacker emblem