You are visiting from: US

Open LDAP Howto

This is an old howto, but proofed to be usefull a number of times. I hope to update this soon. As well as translate it to english.

Contents

Introductie

LDAP, het Lightweight Directory Access Protocol, biedt de mogelijkheid om e-mail adressen, telefoongegevens of welke grote structuur gegevens dan ook snel te kunnen raadplegen vanuit diverse programma's. Veel e-mail clients ondersteunen LDAP standaard als een methode om e-mail adressen op te zoeken. In het systeembeheer wordt LDAP vaak gebruikt om voor gebruikers gegevens centraal op te slaan zodat deze gegevens te raadplegen zijn vanaf meerdere servers.

Verschil tussen LDAP en een normale database. De informatie in een LDAP directory is zo opgeslagen dat gegevens snel te vinden zijn, vele malen sneller dan in een database. Het is dus niet bedoeld om ook op regelmatige basis gegevens op te slaan.

In dit document zal worden uitgelegd hoe je een LDAP server moet installeren. Configureren en services zoals SSH er gebruik van laten maken. Om services gebruik te laten maken van LDAP, moeten er twee modules geinstalleerd worden, pam-ldap en nss-ldap. Ik ga er verder vanuit dat de openSSL libs aanwezig zijn op het systeem.

Installeren OpenLDAP

Download de source vanaf http://www.openldap.org/. Pak het pakket uit met:

tar -xvzf openldap-VERSION.tgz

Ga naar de directory waar de OpenLDAP source is uitgepakt. Met de volgende commando.s installeer je het pakket in /usr/local

/configure --with-tls
make depend
make
make test
make install

Het kan zijn dat je tijdens de configure een fout krijgt m.b.t. het vinden van SSL libraries,

configure: error: Could not locate TLS/SSL package

Je hebt dan of OpenSSL niet geinstalleerd of het kan niet gevonden worden. Kijk of OpenSSL is geinstalleerd, als dit niet zo is, installeer dit dan, zie daarvoor http://www.linux-scripts.nl/howto/index.php?titel=1&stap=2 Heb je OpenSSL wel geinstalleerd, dan kunnen de files niet gevonden worden, probeer het dan alsvolgt:

env CPPFLAGS=-I/usr/local/ssl/include LDFLAGS=-L/usr/local/ssl/lib ./configure --with-tls 

Mocht je de volgende foutmelding krijgen:

configure: error: BDB: BerkeleyDB not available

Download dan de source vanaf:http://www.sleepycat.com/download/index.shtml Ten tijde van het schrijven van deze howto is dit de nieuwste versie: http://www.sleepycat.com/update/snapshot/db-4.1.25.tar.gz

wget http://www.sleepycat.com/update/snapshot/db-4.1.25.tar.gz
tar -xvzf db-4.1.25.tar.gz
cd db-4.1.25/dist
./configure && make && make install

OpenLDAP configuratie

Als dit allemaal goed is gegaan is de LDAP server geinstalleerd. Nu de server configureren. Ga naar /usr/local/etc/openldap/ en bewerk de file slapd.conf. Als het goed is is de volgende regel reeds aanwezig.

include /usr/local/etc/openldap/schema/core.schema 

Voeg daaronder de volgende toe:

include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/samba.schema

Let op: het is belangrijk op de volgorde te letten!
Maak basic accesslist:

access to attr=userPassword
  by self write
  by anonymous auth
  by * none

access to *
  by * read
  by anonymous auth

Ga naar het volgende gedeelte van de config file

#############################
# ldbm database definitions #
#############################

Verander daar het volgende:

suffix "o=test,c=NL"
rootdn "cn=Manager,o=test,c=NL"
rootpw geheim

Als het goed is staat er als zoiets soortgelijks, dit kan je dan weghalen, of een # voor zetten. Hiermee geef je de suffix van de LDAP server aan, defineer je de manager, en geef je .hard. een wachtwoord voor de manager op. De rest kan je laten staan. Kopieer het samba.schema in de directory /usr/local/etc/openldap/schema. Dit schema kun je downloaden op http://www.linux-scripts.nl/howto/ldapbijlage.txt Als je dat gedaan hebt kan je de server starten met:

/usr/local/libexec/slapd -d 33

De LDAP server wordt nu gestart in debug mode, als het goed is moet je het volgende ongeveer zien:

/usr/local/etc/openldap# /usr/local/libexec/slapd -d 33 
@(#) $OpenLDAP: slapd 2.0.27-Release (Tue Dec 3 21:14:32 CET 2002) $
root@debian:/usr/src/openldap-2.0.27/servers/slapd
daemon_init: listen on ldap:///
daemon_init: 1 listeners to open...
ldap_url_parse_ext(ldap:///)
daemon: socket() failed errno=97 (Address family not supported by protocol)
daemon: initialized ldap:///
daemon_init: 1 listeners opened
slapd init: initiated server.
slapd startup: initiated.
slapd starting

Als je dit ziet, is alles goed, en kan je de server opstarten als daemon!

/usr/local/libexec/slapd

LDAP entry's toevoegen

Nu wordt het tijd de eerste entry.s toe te voegen Eerst database aanmaken met manager, creeer een file met de naam ldif met de volgend inhoud:

dn: o=test,c=nl
o: test
objectclass: top
objectclass: organization

dn: cn=Manager,o=test,c=nl
objectclass: organizationalRole
cn: Manager

Nu gaan we deze file toevoegen:

/usr/local/bin/ldapadd -x -W -D 'cn=manager,o=test,c=NL' -f ldif

Er wordt gevraagd om het wachtwoord, deze staat in de slapd.conf. Als je nu het commando:

/usr/local/sbin/slapcat 

geeft, krijg je de inhoud van de database te zien. De inhoud van de ldap database kan ook worden opgevraagd met een query:

/usr/local/bin/ldapsearch -x -W -D 'cn=manager,o=test,c=nl' -b 'o=test,c=nl' objectclass=*

Je database kan nu gebruikt worden. Je kan nu ook het wachtwoord van de manager uit de slapd.conf halen. Mochten er ooit problemen zijn met het manager account, dan kan je hierin weer een wachtwoord zetten.

LDAP server vullen en modificeren

Het vullen van de LDAP server kan je doen d.m.v. ldif files. Een voorbeeld van zo'n file staat hieronder:

dn: uid=andree,o=test,c=nl
objectClass: person
objectClass: inetorgperson
objectClass: posixaccount
cn: Andree Toonk
givenName: Andree
sn: Toonk
street: Leliestraat 34
postalCode: 3851rS
uid: andree
mail: andree@bos.nl
uidNumber: 9016
gidNumber: 9000
homeDirectory: /home/andree
userpassword: {SSHA}nvOmxpDFxxjxmcNbCOYd++5miHrTz72y

Zo'n encrypt userpassword maak je met:

/usr/local/sbin/slappasswd

De uitkomst is dan zoiets als:

{SSHA}jbvyIXQRzPDmxRS5LTzwD4jwxC62CfLR

Je kan zo.n ldif toevoegen met het commando ldapadd:

/usr/local/bin/ldapadd -x -W -D 'cn=manager,o=test,c=NL' -f andree.ldif

Er wordt dan gevraagd om het manager wachtwoord, dit is het wachtwoord wat je in de slapd.conf hebt toegevoegd, of wat je zojuist in de ldif hebt aangemaakt.
Met ldapdelete kan je users verwijderen:

/usr/local/bin/ldapdelete -x -W -D 'cn=manager,o=test,c=NL' "uid=andree,o=test,c=NL"

Zoeken op een user gaat alsvolgt:

/usr/local/bin/ldapsearch -x -W -D 'cn=manager,o=test,c=nl' -b 'o=test,c=nl' uid=andree 

Wachtwoord van een user wijzigen gaat alsvolgt, maak een ldif:

dn: uid=andree,o=test,c=nl
userPassword: {SSHA}Z5cDH9l/dbTglmc9wcjVd4Ii9AknPJHJ

Dan een ldap modify:

/usr/local/bin/ldapmodify -x -W -D 'cn=manager,o=test,c=nl' -b 'o=test,c=nl' -f LDIF-FILE

Het kan ook met het commando ldappasswd, zodoende hoef je niet eerst een ldif te maken:

/usr/local/bin/ldappasswd -x -W -D 'cn=manager,o=test,c=nl' 'uid=andree,o=test,c=nl' -s nieuw-wachtwoord

Aanmaken van groepen

Alleen LDAP beheers groep

dn: cn=Beheer,o=test,c=NL
cn: Beheer
objectClass: groupOfNames
objectClass: top
member: uid=andree,o=test,c=NL
member: uid=test,o=test,c=nl

Alleen Posix groep (aanmaken van Posix groepen (gid))

dn: cn=beheer2, o=test,c=nl
objectclass: top
objectclass: posixGroup
cn: beheer
gidnumber: 9000

Combinatie van beide

dn: cn=combi-groep, o=test,c=nl
objectclass: top
objectclass: posixGroup
objectclass: groupofnames
cn: combi-groep
gidnumber: 9003
member: uid=andree,o=test,c=nl 

Dit zijn dus voorbeeld ldif files. Deze kun je als volgt toevoegen (waabij group.ldif

/usr/local/bin/ldapadd -x -W -D 'cn=manager,o=test,c=NL' -f group.ldif

LDAP over TLS/SSL

LDAP biedt ook de mogelijkheid het verkeer te encrypten d.m.v. TLS/SSL. Er zijn daarvoor 2 mogelijkheden: De eerste optie is start_tls, hiermee is poort 389 (de standaard LDAP poort) te gebruiken voor normaal, niet versleuteld, verkeer en voor versleutelde LDAP communicatie d.m.v. Transport Layer Security.
Een tweede optie is de slapd te laten luisteren naar zowel poort 389 en 636, poort 636 wordt dan gebruikt voor het versleutelde LDAP verkeer(SSL). Sommige software pakketten kunnen nog niet overweg met de start_tls optie, vandaar de we allebei de mogelijkheden gaan implementeren. Maak een dir /usr/local/etc/openldap/ssl

cd /usr/local/etc/openldap/ssl

Creeer een certificaat met:

/usr/local/ssl/bin/openssl req -new -x509 -nodes 
-keyout /usr/local/etc/openldap/ssl/server.key \
-out /usr/local/etc/openldap/ssl/server.crt 

LET EROP DAT JE ALS COMMON NAME DE FQDN VAN JE MACHINE OP GEEFT!

/usr/local/ssl/bin/openssl genrsa -des3 -out /usr/local/etc/openldap/ssl/ca.key 1024

/usr/local/ssl/bin/openssl rsa -in /usr/local/etc/openldap/ssl/ca.key \
-out /usr/local/etc/openldap/ssl/ca.key

/usr/local/ssl/bin/openssl req -new -x509 -days 365 -key \
/usr/local/etc/openldap/ssl/ca.key -out /usr/local/etc/openldap/ssl/ca.crt

LET EROP DAT JE ALS COMMON NAME DE FQDN VAN JE MACHINE OP GEEFT!
Voeg het volgende toe aan je slapd.conf:

TLSCertificateFile /usr/local/etc/openldap/ssl/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/ssl/server.key
TLSCACertificateFile /usr/local/etc/openldap/ssl/ca.crt 

Nu de slapd opnieuw starten (eerst oude process stoppen (killall slapd))

/usr/local/libexec/slapd -h "ldaps:/// ldap:///"

Als het goed is wordt er nu geluisterd naar twee poorten, 389 en 636. Dit is te testen met:

/usr/local/bin/ldapsearch -x -W -H ldap://linux.vet.fnt.hvu.nl -ZZ -D \
	'cn=manager,o=test,c=nl' -b 'o=test,c=nl' uid=andree -d33

De -ZZ betekent starttls (poort 389). Let op dat je bij -H ldap:// dezelfde host op geeft als je bij de common name van het certificate hebt opgegeven!! Je kan ook gebruiken:

/usr/local/bin/ldapsearch -x -W -H ldaps://linux.vet.fnt.hvu.nl -D \
	'cn=manager,o=test,c=nl' -b 'o=test,c=nl' uid=andree -d222

Let op dat de naam hetzelfde moet zijn als in de commonname certificaat! Met de debug info kan je zien dat alles over TLS/SSL verloopt. Hiermee test je LDAP over SSL, dus naar poort 636.

your IP address is 54.81.157.56 Andree Toonk.           Last Modified: 10/01/2009