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:~$