LDAP bootstrap unter ubuntu 12.04

November 20, 2015

Nach der Installation von LDAP auf Ubuntu 12.04 liegt unter /etc/ldap/slapd.conf/ ein komplexes Schema aus Dateien zur Konfiguration des LDAP. Das geht auch einfach in dem man schlicht die Datei /etc/ldap/slapd.conf anlegt. In meinem Beispiel sieht diese Konfiguration wie folgt aus:

include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include         /etc/ldap/schema/openssh-lpk_openldap.schema

pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd/slapd.args

# OpenLDAP logs can get rather spammy, so we enable logging only
# on demand for debug purposes to keep the syslog nice and tidy.
loglevel 0

sizelimit unlimited

disallow bind_anon

modulepath      /usr/lib/ldap
moduleload      back_bdb.so
moduleload      back_monitor.so
moduleload      back_ldap.so
moduleload      memberof.so
moduleload      syncprov.so

TLSCACertificateFile    /etc/ssl/private/example.com.pem
TLSCertificateFile      /etc/ssl/private/ldap.example.com.crt.pem
TLSCertificateKeyFile   /etc/ssl/private/ldap.example.com.key.pem
TLSCRLCheck             none

sq3 backend bdb

database config
rootdn  "cn=admin,cn=config"
rootpw admin

database bdb
suffix      "dc=example,dc=com"
checkpoint   32   30
rootdn      "uid=root,dc=example,dc=com"
rootpw     admin
directory   /var/lib/ldap

monitoring on

index cn pres,eq
index dc pres,eq
index member pres,eq
index memberOf pres,eq
index memberUid eq
index objectClass eq
index uid pres,eq
include         /etc/ldap/schema/core.schema

database monitor
rootDN  "cn=admin,cn=Monitor"
rootPW  admin

Anschließend muss noch das Verzeichnis /var/lib/ldap erstellt werden und die Berechtigungen angepasst werden. Das Verzeichnis gehört dem User und der Gruppe openldap.

Damit das LDAP nun seine Objektklassen kennt muss ein minimale Datenbank existieren. Zum aktuellen Zeitpunkt ist die Datenbank nämlich noch ganz leer. Das kann man mit $ slapcat -f /etc/ldap/slapd.conf einfach prüfen.

Um nun die minimale Datenbank zu erstellen, notiert man sich in einer Datei die folgenden Zeilen und speichert sie ab:

dn: dc=example,dc=com
objectClass: domain
objectClass: top
dc: example

Anschließend fügt man mit $ slapadd -f /etc/ldap/slapd.conf < dateiname die Daten in die Datenbank hinzu.

Wenn man nun einen $ slapcat -f /etc/ldap/slapd.conf ausführt sollte man folgen Inhalt erhalten:

dn: dc=example,dc=com
objectClass: domain
objectClass: top
dc: example
structuralObjectClass: domain
entryUUID: 416558d0-1b35-1035-8983-37a3eebcb9ac
creatorsName: uid=root,dc=example,dc=com
createTimestamp: 20151109135518Z
entryCSN: 20151109135518.504219Z#000000#000#000000
modifiersName: uid=root,dc=example,dc=com
modifyTimestamp: 20151109135518Z

Anschließend kann man sich z.B. mit dem Tool Apache DirectoryStudio auf den LDAP Server verbinden und dort drin arbeiten und findet auch die vom LDAP mitgelieferten Objekt Klassen

##Nützlich LDAP Loglevel

| Level |    Keyword    |        Description       |
|-------|:-------------:|:------------------------:|
| -1    | any           | enable all debugging     |
| 0     |               | no debugging             |
| 1     | (0x1 trace)   | trace function calls     |
| 8     | (0x4 args)    | connection management    |
| 32    | (0x20 filter) | search filter processing |
| 64    | (0x40 config) | configuration processing |

Weiter Loglevel finden sich hier in dieser Dokumentation

##ACL’s für regulierten Zugriff

Es sollen nur User aus der Gruppe Admins die Rechte haben, sich direkt am LDAP zu authentifizieren und alle Objekte in dem LDAP verändern zu können. Dazu ist folgende ACL zu benutzen:

access to dn.one="ou=People,dc=example,dc=com"
        filter="(memberOf=cn=admin,ou=Groups,dc=example,dc=com)"
        attrs=userPassword
        by anonymous auth
        by * break

access to * by group="cn=admin,ou=Groups,dc=example,dc=com" manage
by * break