LDAP für Java-Entwickler

OpenLDAP (Linux)

Diese Seite beschreibt das Einspielen des Beispielverzeichnisses in eine OpenLDAP-Installation (Version 2.4) auf Linux, am Beispiel Ubuntu 12. Ab Version 2.3 verwendet OpenLDAP eine neue Art der Konfiguration (OLC oder "dynamic runtime configuration"). Datails dazu entnehmen Sie der Dokumentation. Die alte Konfigurationsdatei slapd.conf wird weiterhin unterstützt, sie findet im Beispiel für Windows Verwendung (siehe hier). Für Linux beschreibe ich im Folgenden die neue Konfigurationsart.

Ausgangssituation

Ubuntu 12.10, Quelle http://www.ubuntu.com

Installation OpenLDAP

Per Kommandozeile:

stefan@ubuntu:~$ sudo apt-get install slapd ldap-utils
[sudo] password for stefan:
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.5.0-17 linux-headers-3.5.0-17-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  libodbc1 libslp1
Suggested packages:
  libmyodbc odbc-postgresql tdsodbc unixodbc-bin slpd openslp-doc
The following NEW packages will be installed:
  ldap-utils libodbc1 libslp1 slapd
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,243 kB of archives.
After this operation, 5,595 kB of additional disk space will be used.
Do you want to continue [Y/n]?
...

Während der Installation wird der Benutzer aufgefordert ein Kennwort für den OpenLDAP-Administrator einzugeben ("Please enter the password for the admin entry in your LDAP directory."). Im Folgenden die Annahme: "secret" wurde eingegeben.

...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
Processing triggers for ufw ...
Setting up libodbc1:i386 (2.2.14p2-5ubuntu4) ...
Setting up libslp1 (1.2.1-9) ...
Setting up slapd (2.4.31-1ubuntu2) ...
  Creating new user openldap... done.
  Creating initial configuration... done.
  Creating LDAP directory... done.
 * Starting OpenLDAP slapd                                               [ OK ]
Setting up ldap-utils (2.4.31-1ubuntu2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Processing triggers for ureadahead ...
Processing triggers for ufw ...
stefan@ubuntu:~$

Administrator für Konfiguration anlegen

Im folgenden wird davon ausgegangen, dass die Kommandozeilenbefehle lokal auf dem rechner ausgeführt werden. Argumente für Hostname, Port etc. entfallen bei LDAP-Kommandos daher.

Kennwort für Benutzer als SSHA-Wert errechnen (Eingabe war hier "secret"):

stefan@ubuntu:/etc/ldap$ slappasswd
New password:
Re-enter new password:
{SSHA}XpTj42CUjcFLj0CFvbVIou5luHN/UgYG
stefan@ubuntu:

Folgende LDIF-Datei configUser.ldif anlegen (SSHA-Wert von oben)

# Administrator fuer Konfiguration
#
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}XpTj42CUjcFLj0CFvbVIou5luHN/UgYG
-
replace: olcRootDN
olcRootDN: cn=admin,cn=config

Per Kommandozeile einspielen:

stefan@ubuntu:~$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f configUser.ldif
[sudo] password for stefan:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
stefan@ubuntu:~$

Benutzer testen (-LL schaltet die Kommentare in der LDIF-Ausgabe ab)

stefan@ubuntu:~$ ldapsearch -D cn=admin,cn=config -w secret -b '' -s base -LL '(objectclass=*)' namingContexts
version: 1

dn:
namingContexts: dc=nodomain

stefan@ubuntu:~$

Datenbank und Suffix für Bundestag anlegen

Nun eine Datenbank (BDB Backend) konfigurieren. Dazu folgende LDIF-Datei bdbBundestag.ldif anlegen:

# Load modules for database type
dn: cn=module,cn=config
objectclass: olcModuleList
cn: module
olcModuleLoad: back_bdb.la

# Create directory database
dn: olcDatabase=bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: bdb
olcSuffix: dc=bundestag,dc=de
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=bundestag,dc=de
olcRootPW: {SSHA}XpTj42CUjcFLj0CFvbVIou5luHN/UgYG
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
# Allow users to change their own password
# Allow anonymous to authenciate against the password
# Allow admin to change anyone's password
olcAccess: to attrs=userPassword
    by self write
    by anonymous auth
    by dn.base="cn=admin,dc=bundestag,dc=de" write
    by * none
# Allow users to change their own record
# Allow anyone to read directory
olcAccess: to *
    by self write
    by dn.base="cn=admin,dc=bundestag,dc=de" write
    by * read

Die Konfiguration ist durch einen Serverfault-Beitrag inspiriert. Anschließend die Datei einspielen, um die Datenbank anzulegen:

stefan@ubuntu:~$ ldapadd -D cn=admin,cn=config -w secret -f bdbBundestag.ldif

adding new entry "cn=module,cn=config"

adding new entry "olcDatabase=bdb,cn=config"

stefan@ubuntu:~$


Testen:

stefan@ubuntu:~$ ldapsearch -x -b '' -s base -LL '(objectclass=*)' namingContexts
version: 1

dn:
namingContexts: dc=nodomain
namingContexts: dc=bundestag,dc=de

stefan@ubuntu:~$

LDIF-Daten einspielen

Per Kommandozeile:

stefan@ubuntu:~$ ldapadd -D cn=admin,dc=bundestag,dc=de -w secret -c -f bundestag_v4_0_mdb17_ohneFotos.ldif

adding new entry "dc=bundestag,dc=de"
adding new entry "ou=gruppen,dc=bundestag,dc=de"
adding new entry "ou=personen,dc=bundestag,dc=de"
adding new entry "ou=parteien,ou=gruppen,dc=bundestag,dc=de"
adding new entry "ou=fraktionen,ou=gruppen,dc=bundestag,dc=de"
adding new entry "cn=Abgeordnete,ou=gruppen,dc=bundestag,dc=de"
...

adding new entry "uid=wzylajew,ou=personen,dc=bundestag,dc=de"
adding new entry "uid=bzypries,ou=personen,dc=bundestag,dc=de"

stefan@ubuntu:~$

Verifikation

Per Kommandozeile:

stefan@ubuntu:~$ ldapsearch -x -b "dc=bundestag,dc=de" -s sub '(sn=Merkel)' cn title

# extended LDIF
#
# LDAPv3
# base <dc=bundestag,dc=de> with scope subtree
# filter: (sn=Merkel)
# requesting: cn title
#

# amerkel, personen, bundestag.de
dn: uid=amerkel,ou=personen,dc=bundestag,dc=de
cn: Dr. Angela Merkel
title: Dr.

# pmerkel, personen, bundestag.de
dn: uid=pmerkel,ou=personen,dc=bundestag,dc=de
cn: Petra Merkel

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

stefan@ubuntu:~$