Contents

5. Adatbázis létrehozás és karbantartása

Ez a fejezet leírja az adatbázisok létrehozását a semmibõl. Két út van az adatbázisok létrehozására. Elõször, adatbázisok létrehozhtók az LDAP online használatával. Ennél az eljárásnál egyszerûen az slapd indítása után a bejegyzések hozzáadása a tetszés szerinti ldap kliensel elvégezhetõk. Ez az eljárás viszonylag kis adatbázisoknál használható (néhány száz vagy ezer bejegyzés, a követelmények függvényében).
A második eljérés az adatbázisok létrehozása offline módban, az index generáló eszközök segítségével. Ez a legjobb eljárás, ha sok ezer bejegyzést kell létrehozni, ami elfogadhatatlanul hosszú idõt eredményez az LDAP eljárással, vagy hogy az adatbázis biztosan ne legyen elérhetõ a létrehozás ideje alatt.

5.1 Adatbázis online létrehozása

Az OpenLDAP programcsomag tartalmazza az ldapadd programot, a bejegyzések hozzáadásához, amíkor az LDAP szerver fut. Az elsõ bejegyzések hozzáadása után még további bejegyzések felvétele is lehetséges. Mindenképpen szükséges a következõ konfigurációs opciók beállítása az slapd indítáa elõtt:

suffix <dn>

A 3 fejezetben leírtak szerint ez az opcó mondja meg, milyen bejegyézsek kerülnek ebbe az adatbázisba. Be kell állítani a létrehozandó részfa gyökerének DN értékét:

suffix "o=Nns, c=Hu"

Specifikáni kell a könyvtárat, ahol az index file-ok létrejönnek:

directory <könyvtár>

Például:

directory /var/lib/ldap

Lehetõvé kell tenni valakinek, hogy csatlakozhasson az slapdhez bejegyzések hozzáadásának jogával.  Ez a következõ két opció segítségével lehetséges az adatbázis létrehozása során:

rootdn <dn>

rootpw <jelszó> /* Mindenképpen kódolt jelszót kell használni !!!*/

Ez az opció határozza meg az adatbázis adminisztrátoraként használható bejegyzés DN-jét és jelszavát (akinek minden tevékenység engedélyezett). Az itt meghatározott  DN és a jelszó mindig mûködik, attól függetlenül, hogy a bejegyzés vagy a jelszó valóban létezik-e. Ez megoldja a tyúk és a tojás problémáját, hogyan azonosítható az adminisztrátor, és hozhatók létre rekordok bármely bejegyzés létezne.

Végül, az adatbázis definíciónak garantáltan tartalmaznia kell az szükséges indexek definícióinak:

index {<attribútumlista> | alapértelmezés} [pres,eq,approx,sub,none]

Például, a cn, sn, uid és objectlass attribútumok indexét a következõ index konfigurációs sor hozza létre:

index cn,sn,uid
index objectclass pres,eq

index default none

Ha egyszer beállítottad a szükséges dolgokat, indítsd el az slapdüt, kapcsolódj az LDAP klienshez, és kezd el a bejegyzések hozzáadását. Például, az NNS bejegyzést követõ a Postmaster bejegyzés létrhozásához az ldapadd részére létre kell hozni a /tmp/newentry file-t a következõ tartalommal:

o=Nns, c=Hu 
objectClass=organization 
description=Nns kft

cn=Postmaster, o=Nns, c=Hu 
objectClass=organizationalRole 
cn=Postmaster 
description= Nns kft postamester - postmaster@nns.hu
és utána a következõ parancs létrehozza a szükséges bejegyzást:
ldapadd -f /tmp/newentry -D "uid=root, o=Nns, c=Hu" -w secret
A fenti parancs feltételezi, hogy a toodn bejegyzés a "uid=root, o=Nns, c=Hu" és a rootpw a "secret". Ha nem akarod begépelni a jelszót a parancsorba, használd a -W opciót az ldapadd parancs használatakor a -w "jelszó" helyett. Felszólítást kapsz jelszó beírására:
ldapadd -f /tmp/newentry -D "uid=root, o=Nns, c=Hu" -W 
Enter LDAP Password :

5.2 Adatbázis offline létrehozása

A második eljárás adatbázisok offline létrehozása, az alább leírt  index generáló eszközök használatával. Ez a legjobb eljárás ha sok ezer bejegyzés létrehozása szükséges, elfogadhatatlanul hosszú idõbe telna a fent leírt LDAP seszközök használatáv. Ezek az eszközök elolvassák az slapd konfigurációs file-t és az hozzáadandó bejegyzéseket ábrázoló szöveget tartalmazó LDIF file-t. Ez közvetenül az LDMP index file-okat eredményezi. A következõ néhány konfigurációs opciót mindenképpen ismerni kell és beállítani a konfigurációs file adatbázis definíciójának elején:

suffix <dn>

Az elõzõ bekezdésnek megfelelõen, ez az opció határozza meg, milyen bejegyzéseket fog tartalmazni az adatbázis. Ennek a létrehozandó részfa gyökerének DN-jét kell tartalmaznia. Például:

suffix "o=Nns, c=Hu"

Mindenképpen meg kell határozni az index file-ok könyvtárát:

directory <könyvtár>

Például:

directory /usr/lib/openldap

Ezután, valószínüleg szükséges a szükséges lesz a minden nyitott indexfile által használt cache méretét. Az indexek létrehozásának legnagyobb sebessége érdekében
az egész indexnek el kell férnie a memóriában. Ha az adatok túl nagyok, vagy a memória túl kicsi, akkor a lapozó rendszer használatával készíthtõk szép nagy index file-ok. Ennek a mérete a következõ opcióval állítható be:

dbcachesize <egész szám>

Például:

dbcachesize 50000000

Ez egy 50MB nagyságú cache-t hoz léte, ami elég nagy (a University of Michigan-en az adatbázis 125K bejegyzésbõl áll, a legnagyobb index körülbelül 45 MB).  Egy kis kisérletezéssel, és a párhuazmosság fokával (magyarázat késõbb) megállapítható a rendszer számára legmegfelelõbb érték. Ezt az értéket az index file-ok elkészítése után és az slap futtatása elõtt vissza kell állítani.

Végül specifikálni kell, milyen indexekre van szükség. Ez egy vagy index opcióval végezhetõ el:

index {<attribútumlista> | alapértelmezett} [pres,eq,approx,sub,none]

Például:

index cn,sn,uid pres,eq,approx

index default none

Ez létrehozza a presence, equality és approximate indexeket a cn,sn és uid attribútumoknak, és nem készít indexet a többi attribútum számára. További információk a 3. fejezetben találhatók errõl az opciókról.

Ha mindez kész, létre lehet hozni az indexeket az ldif2ldm progammal:

ldif2ldbm -i <inputfile> -f <slapdconfigfile> [-d <debugszint>] [-j <egész szám>] [-n <adatbázisszám>] [-e <etcdir>]

Az argumentumok a következõket jelentik:

-i <inputfile>

Specifikálja az LDIF bemeneti file-t, ami a hozzáadandó bejegyzéseket tartalmazza szöveges formában.

-f <slapdconfigfile>

Specifikálja az slapd konfigurációs file-ját, ami meghatározza hol, milyen indexeket kell létrehozni, stb.

-d <debugszint>

Bekapcsolja a hibakeresést a debugszint által meghatározott módon. A hibakeresés szintjei megegyeznek az slapd értékeivel (lásd a 4.1 fejezetben).

-j <integer>

An optional argument that specifies that at most <integer> processes should be started in parallel when building the indexes. The default is 1. If set to a value greater than one, ldif2ldbm will create at most that many subprocesses at a time when building the indexes. A separate subprocess is created to build each attribute index. Running these processes in parallel can speed things up greatly, but beware of creating too many processes, all competing for memory and disk resources.

-n <adatbázisszám>

Ez az opcionális argumentum határozza meg, hogy a konfigurációs file-ban szereplõ adatbázisok közül melyiket használja. Az elsõ adatbázis az "1", a második a "2", stb. Alapértelmezésként az elsõ ldbm adatbázist használja.

-e <etcdir>

Ez az opcionális paraméter határozza meg azt a könyvtárat, ahol az ldif2ldbm a további adatbázis konverziós eszközöket találja (ldif2index és társai). Az alapértelmezett az telepítõ könyvtár, amit a konfigurációs script állít be. Példa az ldif2ldbm használatára:

/usr/sbin/ldif2ldbm -i új_bejegyzések -f /etc/openldap/slapd.conf

5.3 Az LDIF formátum

Az LDAP Data Interchange Fromat (LDIF) az LDAP bejegyzések megjelenítésére szolgál szöveges formában. Egy bejegyés alapvetõ formája:
[<id>] 
dn: <megkülönböztetõ név> 
<attribútum tipus>: <attribútum érték> 
<attribútum tipus>: <attribútum érték> 
...
ahol az <id> opcionális ID bejegyzés (pozitív egész szám). Rendszerint nem szükséges az <id> egadása, megengedhetõ az adatbázist létrehozó eszközöknek, hogy meghatározzák. Az ldbmcat program olyan LDIF formát hoz létre, amely tartalmazza az <id>-t, így az indexek konzisztensek maradnak.

A sorok folytathatóak a következõ sorban egy szóköz vagy tab karatkerrel. Például:

dn: cn=Gabor Halasz, o=Nns, c=Hu
Többszörös attribútumok több elválasztott sorban is specifikálhatóak. Például
cn: Gabor Halasz
cn: HalaszG
Ha az <attribútum érték> tartalmaz nem nyomtatható karaktereket, szóköz, vagy .`:' karakterrel kezdõdnek, az <attribútum típús>-t kettõspont követi, az érték base64 kódolású. Például a "begins with spave" a következõképpen lesz kódolva:
cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=
A többszörös bejegyzéseket ugyanabban az LDIF file-ban üres sorokkal kell elválasztani. Egy három bejegyzést tartalmazó LDIF file:
dn: cn=Gabor Halasz, o=Nns, c=Hu 
cn: Gabor Halasz 
cn: HalaszG
objectclass: person 
sn: Halasz 

dn: cn=Janos Szabo, o=Nns, c=Hu
cn: Janos Szabo
cn: Jancsika
objectclass: person 
sn: Szabo

dn: cn=Istvan Kovacs, o=Nns, c=Hu 
cn: Istvan Kovacs
cn: Pistike
objectclass: person 
sn: Kovacs
jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD 
A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ 
ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG 
...
Kovacs Istvan jpegPhoto bejegyzése base64 kódolású. Az OpenLDAP csomagban található ldif program használható LDIF formátum készítésére.

FIGYELEM: A követõ szóközöket benne maradnak az LDIF file-ban.A többszörös szóközök is megmaradnak. Ha nem szükségesek az adatokban, akkor el kell távolítani õket.

5.4 Az ldapsearch, ldapdelete és az ldapmodify progrmok

ldapsearch - Az ldapsearch a paransértelmezõ által elérhetõ felületet biztosít az the ldap_search(3) függvény használatához. Ez a program használható bejegyzések kereséséhez az LDAP adatbázisban.

Az ldapsearch áttekintése a következõ (Az opciók jelentése az ldapsearch man lapján található):

ldapsearch  [-n]  [-u]  [-v]  [-k]  [-K]  [-t]  [-A] [-B] [-L] [-R] [-d debuglevel] [-F sep] [-f file] 
[-D binddn]  [-W]  [-w bindpasswd]  [-h ldaphost]  [-p ldapport]   [-b searchbase]   [-s base|one|sub] 
[-a never|always|search|find] [-l timelimit] [-z sizelimit] filter [attrs...]
Az ldapsearch kapcsolatot látesít az LDAP szerverrel, és a filter használatával keresést hajt végre az adatbázisban. A filternek alkalmazkodnia kell az FRC 1558-ban definiált LDAP szürõk ábrázolásához. Ha az ldapsearch egy vagy több bejegyzést talál, az attrs által specifikált attribútumokat adja vissza, és az értékeket a standard kimenetre írja ki. Ha attrs nincs felsorolva, az összes attribútumot visszaadja.

Néhány példa következik az ldapsearch használatára:

ldapsearch -b 'o=Nns,c=Hu' 'objectclass=*' 

ldapsearch -b 'o=Nns,c=Hu' 'cn=Gabor Halasz' 

ldasearch -u -b 'o=Nns' 'cn=Gabor Halasz' sn mail
A -b opció képviseli a searchbase-t (a keresés kindulási pontja) és az -u opció képviseli a felhasználóbarát kimenõ információt.

ldabdelete - Az ldapdelete a paransértelmezõ által elérhetõ felületet biztosít az the ldap_delete(3) függvény használatához. Ez a program használható bejegyzések törléséshez az LDAP adatbázisban.

Az ldapdelete áttekintése a következõ (Az opciók jelentése az ldapdelete man lapján található):

ldapdelete   [-n]   [-v]  [-k]  [-K]  [-c]  [-d debuglevel]  [-f file]  [-D binddn]  [-W]  [-w passwd] 
[-h ldaphost] [-p ldapport] [dn]...
Az ldapdelete kapcsolatot látesít az LDAP szerverrel, és töröl egy vagy több bejegyzést. Ha egy vagy több dn attribútum szerepel, a a bejegyzések azok megkülönbüztetõ nevükkel együtt törlõdnek. Minden dn-nek meg kell felelnie egy, az RFC1779-ben definiált karatersorral. Ha nincs dn argumentum megadva, a dn-ek listaját a standard bemenetrõl olvassa be (vagy az -f kapcsolóval megadott file-ból).

Néhány példa következik az ldapsearch használatára:

ldapdelete 'cn=Gabor Halasz,o=Nns,c=Hu' 

ldapdelete -v 'cn=Janos Szabo,o=Nns,c=Hu' -D'cn=Gabor Halasz,o=Nns,c=Hu' -W
A -v opció kéviseli a  bõsbeszédû kimenetet, a -D képviseli a Binddn-t (az azonosító dn-t) és a -W kéviseli a password propmt-ot.

ldapmodify - Az ldapmodify a paransértelmezõ által elérhetõ felületet biztosít az the ldap_modify(3) függvény használatához. Ez a program használható bejegyzések módosításához az LDAP adatbázisban.

Az ldapmodify áttekintése a következõ (Az opciók jelentése az ldapmodify man lapján található):

ldapmodify   [-a]  [-b]  [-c]  [-r]  [-n]  [-v]  [-k]  [-d debuglevel]  [-D binddn]  [-W]  [-w passwd] 
[-h ldaphost] [-p ldapport] [-f file] 

ldapadd [-b] [-c] [-r] [-n] [-v]  [-k]  [-K]  [-d debuglevel]  [-D binddn]  [-w passwd]  [-h ldaphost] 
[-p ldapport] [-f file]
Az ldapadd megvalósítása egy hard link az ldapmodify programra. Az  ldapadd hívásakor az ldappmodify -a (új bejegyzés hozzáadása) kapcsolója automatikusan bekapcsoldódik.

Az ldapmodify kapcsolatot létesít az LDAP szerverrel, és egy vagy több bejegyzést módosít. A bejegyzések informázióit a standard inputról olvassa be, vagy pedig az -f opcióval beállított file-ból.

Néhány példa következik az ldapmodify használatára:

Feltételezve, hogy a /tmp/entrymods file létezik, és a következõket tartalmazza:

dn: cn=Modositando, o=Nns, c=Hu 
changetype: modify 
replace: mail 
mail: modme@nns.hu
- 
add: title 
title: Nagy proba
- 
add: jpegPhoto 
jpegPhoto: /tmp/modme.jpeg 
- 
delete: description 
-
A következõ parancs:
ldapmodify -b -r -f /tmp/entrymods
kicseráli a "Modositando" bejegyzés mail attribútumát a "modme@nns.hu"-ra, hozzáadja a "Nagy proba" tittle attribútumot, a /tmp/modme.jpg file tartalmát, mint jpegPhoto, és törli a description attribútumot.

A fentiekkel megegyeõ módosítások a régebbi ldapmodify bemeneti formájában:

cn=Modositando, o=Nns, c=Hu 
mail=modme@Nns.hu
+title=Nagy proba 
+jpegPhoto=/tmp/modme.jpeg 
-description
és a parancs:
ldapmodify -b -r -f /tmp/entrymods


Feltételezve, hogy a /tmp/entrymods file létezik, és a következõket tartalmazza:

dn: cn=Gabor Halasz, o=Nns, c=Hu 
objectClass: person 
cn: Gabor Halasz
cn: HalaszG
sn: Halasz
title: System manager
mail: halasz.g@nns.hu
uid: HalaszG
A parancs:
ldapadd -f /tmp/entrymods
hozzáadja a Gabor Halasz bejegyzést.
 

Feltételezve, hogy a /tmp/entrymods file létezik, és a következõket tartalmazza:

dn: cn=Gabor Halasz, o=Nns, c=Hu 
changetype: delete
A parancs:
ldapmodify -f /tmp/entrymods
eltávolítja a Gabor Halasz bejegyzést.

Az -f opció képviseli a file-t (a módosításhoz szükséges információkat tartalmazza a standard input helyett), a -b kapcsoló jelzi a bináris adatokat (és minden '/' karakterrel kezdõdõ értéket binárisként kezel), az -r kapcsoló állítja be a hozzáadást (a létezõ értékeket alapértelmezésként felülírja).


 Contents