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.