LDAP-Lightweight Directory Access Protokol
SADRŽAJ :
1. UVOD
2. PREGLED X-500
3. PREGLED LDAP-a
4. OSNOVNE PREDNOSTI
5. IMPLEMENTACIJA
6. PERFORMANCE
7. RAD U BUDUĆNOSTI
8. ZAKLJUČAK
1.UVOD
X.500 , OSI standard, definira složenu servisnu uslugu bartanja sa direktorijima, uključujući informacijski model, prostor za ime( namespace), funkcijski model, i osnovni kostur za autentičnost. X.500 definira Directory Access Protokol (DAP)
koji koriste klijenti da bi pristupili direktorijima. DAP je potpuni OSI protokol koji sadrži mnoge mogučnosti, od koji se večina ne primjenjuje u ap
likacijama.DAP je značajno kompliciraniji nego TCP/IP implementacija i zahtjeva mnogo više koda i mnogo snažnija računala da bi radilo. Veličina i kompleksnost DAP-a otežavaju rad na manjim računalima . Kada se koristi DAP implementacija, obično se teško prihvača, pa je zbog toga rijeđe primjenjuje.
Lightweight Directory Access protokol (LDAP) je dizajniran tako da ukloni poteškoće X.500 protokola, čineći tako direktorije pristupne većoj raznolikosti mašina i aplikacija. Gradeći na sličnim idejama kao DAS i DIXIE protokoli, LDAP radi direktno preko TCP/IP-a ili nekog drugog pouzdanog transporta. Kao što ćemo vidjeti, pojednostavljuje mnoge operacije koje koristi X.500 izostavljajući rjetko korištene opcije i emulirajući neke operacije sa drugima. Rezultat
je low-overhead metoda pristupa za X.500 direktorije, pogodne za upotrebu na gotovo svakoj platformi.Drugi odjeljak ovog seminara ukratko nam opisuje X.500. Treći odjeljak nam opisuje LDAS, opisujući pojednostavljenja koja su napravljena u odnosu na X.500. Odjeljak četiri sumira najvažnije prednosti LDAP protokola. Odjeljak pet ukratko opisuje našu implementaciju LDAP-a, uključujući naš server i korisnikov library. Šesti odjeljak uspoređuje DAP i LDAP izvedbe. I konačno, sedmi odjeljak opisuje nešto što se
radi na poboljšanju LDAP-a.2. PRGLED X.500
X.500 je OSI-jev pristup direktorijima. X.500 definira sljedeće komponente:
-- Informacijski model određuje formu i karakter informacija u direktoriju.
-- Prostor za ime dozvoljava da se podaci referenciraju i organiziraju.
-- Funkcijski model determinira koje operacije se mogu izvoditi sa podacima.
-- Sam kostur za autentičnost osigurava podatke u direktoriju.
-- Operacijski model odlučuje kako se podaci distribuiraju i kako se izvode operacije.
Informacij
ski model je usredotočen na unos podataka (entries), koji se sastoje od atributa. Svaki atribut ima tip i jednu ili više vrijednosti. Tip određuje syntaxu atributa, koji definira koji tip podataka je dozvoljen u vrijednosti.Koji atributi su potrebni i dozvoljeni prilikom unosa se kontrolira od specijalnog objectclass
atributa prilikom svakog unosa. Vrijednosti tih atributa definiraju tip unosa. Tip unosa određuje koji su atributi potrebni, i koji su opcionalni. Npr. klasa osoba potrebuje atribute prezime i ime, ali opis ,vidi ostalo, i dr. su opcionalni.Unos se raspoređuju u strukturu drva i podjeljeni između servera u geografskoj i organizacijskoj distribuciji. Unos se imenuje prema njihovom mjestu u hijararhiji sa specifičnim imenom ( destinqush name-DN
). Svaka komponenta DN-a se naziva relativnim specifucnim imenom (RDN). Slika 1. prikazuje odnose između unosa podataka, atributa i vrijednosti te pokazuje kako su unosi raspoređeni u drvo.
Slika1.
X.500 mod
el se usredotočuje na unose podataka koji se sastoje od atributa koji sadrže tip i jednu ili više vrijednosti. Unosi su organizirani u strukturu drva. Pod drugim imenom unosi se mogu koristiti da se izgrade nehijararhijski odnosi.Funkcionalnost, X.500 def
inira operacije u trima područjima: traži i čitaj, promjeni, autoriziraj. U prvoj kategoriji, operacija čitaj pronalazi atribute nekog unosa čije je ime poznato. Operacija listanja izlista djecu datog unosa. Operacija traži selektira unose iz definiranog područja drveta zasnovano na nekom kriteriju selekcije znanom kao filter za pretraživanje. Za svaki pronađen unos, zatraženi set atributa ( sa ili bez vrijednosti) je vračen.Unos sa drugim imenom se može pratiti automatski tokom pretrage, ček i ako pređu granice servera.U drugoj kategoriji, X.500 definira četiri operacije za modificiranje direktorija. Operacija promjeni se koristi da bi promjenili postojeće unose. Dozvoljava da se atributi i vrijednosti dodaju ili brišu. opracije didaj i briši se koriste da
bi unjeli ili izbrisali unos iz direktorija. Operacija promjeni RDN se koristi za promjenu imena.Posljednja kategorija definira operaciju povezivanja, dozvoljavajući dozvoljavajući korisniku da pokrene proces i dokaže identitet direktorija. Nekoliko metoda autentičnosti se koriste. Operacija nepovezivanja se koristi da bi se prekinuo rad sa direktorijem. Operacija napusti je također definirana, dopuštajući da se operacija u nastavku prekine.
Svaka operacija X.500 i rezultat se mogu potpisati da bi osigura
la integitet. Potpisivanje se izvodi koristeći korisnikov ili serverov "public key". Zahtjev za potpis ili rezultat se izvodi od kraja do kraja u samom protokolu, dozvoljavajući da se integritet provjerava u svakom koraku. Time s eosigurava od oduzimanja ili promjene servera. Kontrole serisa se mogu specificirati da odrede informacije kao što je kako će se operacija izvesti, maximalan broj unosa koji će se vratiti i maximalno vrijeme koje će se ptrošiti na operaciju.U X.500 , direktorij se disrtibuira do
mnogo servera. Nema veze na koji server se korisnik spoji, ima isti pogled na direkorij. Ako server nemože odgovoriti na korisnikov zahtjev, može prebaciti zahtjev na drugi server , ili uputiti korisnika na drugi server.2. PREGLED LDAP-a
Slika 2
.
LDAP preuzima isti informacijski model i prostor za ime (namespace) od X.500. Radi na istom principu korisnik-server, sa jednom važnom razlikom: nema povratka "referrals-a" u LDAP-u. LDAP server mora vratiti samo rezultate ili greške korisniku. Ako postoje "referralsi", LDAP server je zadužen da ih skine. Ovaj model je opisan slikom 2. iako prikazani posrednički server nije potreban.
LDAP-ov korisnik-server model uključuje LDAP-ov server koji prevodi LDAP zahtjeve u X.500 zahtjeve, skidajući X.500 "referralse" , i vraća rezultate korisniku.
LDAP funkcijski model je podskup X.500 modela. LDAP podržava sljedeće operacije: traži, dodaj, obriši, promjeni, promjeni RDN, poveži, prekini vezu i napusti. Operacija traži je slična toj operaciji koju koristi DAP. Objekt i prostor su definirani, određujući koji dio stabla se pretražuje. Filter određuje unose unutar područja koji se selektiraju. LDAP-ovi filtri za traženje ima istu funkcionalnost kao i DAP ali se izvodi na jedno
stavniji način.Vremenska i " size limt" kontrola su uključene direktno u zahtjev traženja( nisu uključene u druge operacije ).
SearchRequest ::= [APPLICATION 3] SEQUENCE {
baseObject LDAPDN,
scope ENUMERATED {
baseObject (0),
singleLevel (1),
wholeSubtree (2)
},
derefAliases ENUMERATED {
neverDerefAliases (0),
derefInSearching (1),
derefFindingBaseObj (2),
alwaysDerefAliases (3)
},
sizeLimit INTEGER (0 .. MaxInt),
timeLimit INTEGER (0 .. MaxInt),
attrsOnly BOOLEAN,
filter Filter,
attributes SEQUENCE OF AttributeType
}
Filter ::= CHOICE {
and [0] SET OF Filter,
or [1] SET OF Filter,
not [2] Filter,
equalityMatch [3] AttributeValueAssertion,
substrings [4] SubstringFilter,
greaterOrEqual [5] AttributeValueAssertion,
lessOrEqual [6] AttributeValueAssertion,
present [7] AttributeType,
approxMatch [8] AttributeValueAssertion
slika 3. ASN.1 za LDAP-ovu operaciju pretraživanja
LDAP-ova operacija traženja nudi sličnu funkcionalnost kao i DAP-ova operacija traženja. Kombinira parametre operacije traženja i operacije kontrole te pojednostavljuje filtersko dekodiranje.
LDAPDN i komponente tipa atributa operacije traženja su dekodirane kao jednostavni karakterni stringovi koristeći formate koji su definirani u RFC 1779[5] i RFC 1778[2], a to je puno bolje nego dekodiranje koje koristi X.500. Slično, u AttributeValueAssertion je dekodirano kao jednostavni OCTETSTRING, a ne kao visoko strukturirani ASN.1 tip. Struktura je refletirana u syntaxu dekodiranog stringa, a ne u samo dekodiranje.
Rezultati LDAP pretrage se vračaju korisniku jedan po jedan, u zasebnim searchEntry paketima. Prekid opercije se dogodi kada se nađe traženi unos i vrati krisniku. Kada ima taj paket korisniku i server je lakše slati rezultate, baratajući tako sa paketima pojedinačno. To je izrazito učin
kovito u sredinama gdje memorije nemogu obarditi sve podateke velike pretrage.Operacije listanja i čitanja X.500 nisu uključene u LDAP. Umjesto toga one su uključene u operaciju traženja. Čitanje se odvija prilikom osnovne pretrage unosa, sa filterskom pretragom dali postoji objectClass atribut. Svaki unos treba imati objectClass i mora odgovarati tom filtru. Listanje se izvodi jedno razinskom pretragom , također sa fiterom koji utvrđuje postojanje objectClass atributa.
Operacija promjeni je malo razlikuj
e od DAP-ove. U DAP-u četiri različite promjene se mogu ostvariti: čitavi atributi se mogu dodati ili izbrisati; pojedine vrijednosti se mogu dodati ili izbrisati. Ove opcije zahtjevaju od korisnika da pročita unos prije namjere da ga promjeni.U LDAP-u je pojednostavljena semantika operacije promjeni korištenjem tri operacije: dodaj vrijednosti; izbriši vrijednosti; i promjeni vrijednosti. Ako se zada zahtjev za dodavanjem vrijednosti nekom atributu koji ne postoji, tada se taj atribut stvara automatski. A
ko se zada zahtjev da se izbriše zadnja vrijednost atributa, čitav atribut se briše. Atribut se također može obrisati tako da se specificira operacija brisanja vrijednosti bez da se specificiraju vrijednosti. Konačno, operacija promjeni vrijednosti se koristi za izradu atributa koji sadrži dane vrijednosti nakon promjene. LDAP server se brine da prevede zahtjeve zamjene u potrebne sekvence promjeni, dodaj, i obriši operacije koje su potrebne za X.500.LDAP-ova operacija povezivanja podržava podskup funkcionalnosti operacije povezivanja X.500 modula. Dozvoljava samo jednostavnu autentičnost, koja se sadrži od čistog tekstovnog passworda, i Keberoovu verziju 4 autentičnosti, koji prevodi u X.500 eksternu metodu autentičnosti. LDAP-ova operacija povezivanja u
ključuje izbor akreditiva, dopuštajući buduću expanziju mogućih metoda autentičnosti.LDAP-ove operacije prekini vezu, napusti, promjeni RDN, dodaj i promjeni su u potpunosti identične kao i operacije korištene u DAP-u.
4.VAŽNE PREDNOSTI
LDAP ima četiri važne prednosti naspram DAP-a. Prvo, radi direkno preko TCP-a (ili nekog drugog pouzdanog transporta, u teoriji), eliminirajući mnogo od set-upa priključenja i ovreheda prilikom rada sa paketima. Korištenje TCP/IP protokola znači da LDAP može raditi
na većini sistema.Drugo, LDAP pojednostavljuje funkcijski model X.500 na dva načina. Izostavlja operacije listanja i čitanja, emi+ulirajući ih sa operacijom pretraživnja. TAkođer izostavlja neke od rijeđe korištenih operacija i djelove zadužene za sigurno
st punog X.500. To pojednostavljuje LDAP implementaciju.Treće, iako X.500 i LDAP opisuju i dekodiraju elemente protkola koristeći ASN.1 i BER, LDAP koristi string dekodiranje za posebna imena i elemente podataka. X.500 koristi kompleksno i visoko strukturirano dekodiranje čak za jednostavne elemente podataka; LDAP-ovi elementi podataka su tipa string. Ovo dekodiranje je pun pogodak za posebna imena, koji imaju veliku strukturu što za posljedicu ima kompleksno kodiranje/dekodiranje.
Četvrto, LDAP osobađa klijente od tereta da prognjaju povratne informacije . LDAP server je zadužen za pronalaženje informacija varćenih od X.500, vračajući ili rezultate ili greške korisniku.
5.IMPLEMENTACIJA
Prilikom implementacije LDAP-a trebalo je ostavriti tri zadatka:
-- osigurati javno dostupnu implementacisku referencu protokola;
-- omogućiti razvoj korisnika LDAP-a na raznim platformama;
-- riješiti problem pristupa našem X.500 direktoriju.
U dodatku, otkrili smo da ovu implementaciju nudi velik broj prodavača, povečavajući dostupnost LDAP-ovih proizvoda.
LDAP-ova implementacija ima tri snovne komponente: server, imenik korisnika , i razne korisnike. Naš LDAP server, ldapd, je zasnovan na popularnom paketu ISO Developement Environment (ISODE). Koristimo ISODE OSI implem
entaciju i DAP-ov imenik korisnika da bi mogli pristupiti X.500. Ldapd server podržava veze sa mnogim X.500 serverima.Ldapd server se može pogoniti ako UNIX-ov stand-alone ili iz
inetd-a, UNIX-ovog internet protokola. Prihvaća vezu od korisnika LDAP-a, radeći kopiju sebe tako da bi radio sa svakom vezom. Također podržava bežični LDAP (CLDAP), verziju LDAP-a koji radi preko UDP-a ili nekog drugog bežičnog transporta.Ključ uspjeha LDAP implementacije je bila
libldap, LDAP-ov imenik korisnika. Libldap imenik daje programerima jednostavan ali opet snažan C jezik za povezivanje sa X.500 direktorijem preko LDAP-a. Imenik s+je samo održavajući, uključujući potrebne ASN.1/BER rutine za produciranje i čitanje LDAP-ovih elemenata protokola. Sadrži rutine da započne i završi rad sa diretorijem, izvodi pretrage i druge operacije, i prikaže rezultate vezane za direktorij. Slika 4. je dio C koda koji prikazuje jednostavnu upotrebu libldap. Ilustrira sinhroni interface od libldap. Asinkrone rutine su također ostavrene.#include <ldap.h>
LDAP *ld;
LDAPMessage *e, *r;
char *a, *dn;
/* open a connection and authenticate */
if ((ld = ldap_open("hostname", LDAP_PORT))
== NULL)
fail();
if (ldap_simple_bind_s(ld, NULL, NULL) !=
LDAP_SUCCESS)
fail();
/* search for entries, return all attrs */
if (ldap_search_s(ld, "c=US", LDAP_SCOPE_ONELEVEL,
"o=*michigan*", NULL, 0, &r) != LDAP_SUCCESS)
fail();
/* step through each entry returned */
for (e = ldap_first_entry(ld, r); e != NULL;
e = ldap_next_entry(ld, e)) {
/* get and print the entry name */
dn = ldap_getdn(ld, e);
printf("entry: %s\n", dn);
free(dn);
/* step through each attribute */
for (a = ldap_first_attribute(ld, e);
a != NULL;
a = ldap_next_attribute(ld, e, a)) {
printf("attr: %s\n", a);
/* get and print vals */
v = ldap_get_values(ld, e, a);
for (i = 0; v[i] != NULL; i++) {
printf("val: %s\n", v[i]);
}
ldap_value_free(v);
}
Slika 4. Uzorak libldap koda
Ovaj dio koda traži i vraća unose iz direktorija.Unosi se tada prelaze korak po korak i svaka vrijednost svakog atributa se ispisuje. Ako su imena vraćenih unosa poznata ldap_get_values se megu direktno nazvati imenima.
U dodatku osnovnih operacija prikazanih slikom 4, libldap
sadrži rutine koje pomažu LDAP aplikaciji na razne načine. Postoje rutine koje omogućuju na standardan način prikazivanja unosa. Prikazom upravlja konfiguracijski direktorij koji kaže koje atribute prikazati za unose određene klase objekta i kako ih prikazati. Korištenjem ovih rutina, nisu potrebne promjene koda za aplikaciju da promijeni kako se unosi prikazuju, dodati novi atribut prikazu itd.Također su omogućene rutine koje pomažu u konstrukciji pretraživačkih filtera. Često, različiti filteri se trebaju konstruirati zavisno o unosu korisnika. Npr. u jednostavnoj look – up aplikaciji ako korisnik utipka broj, netko bi možda želio izvesti pretragu unosa sa telefonskim brojem (kućni, na poslu, faks ili mobitel) uspoređujući cijeli ili dio broja. Ako se unese riječ, pretraga po imenu je prikladnija. Ako striktnom usporedbom ne dobijemo nikakve rezultate, t
ada se može probati manje striktna usporedba. Rutine filtera za traženje automatiziraju proces stvaranja ovih filtera. Stvoreni filteri se specificiraju u konfiguracijskoj datoteci sa normalnim izrazima koji se uspoređuju sa korisnikovim unosom.Mnoge LDAP
aplikacije su razvijene od nas samih i drugih na internetu. Neke od interesantnih aplikacija uključuju maX.500, waX.500 i xaX.500, MS Windows, i X Windows. Rad se nastavlja i na drugim aplikacijama.6. IZVEDBA
Izvedba LDAP-a je zadovoljavajuća za većinu aplikacija. U ovom dijelu uspoređujemo izvedbu DAP i LDAP u četiri područja: vrijeme odgovora na upite; veličina upita; PDU brzina dekodiranja; i veličina i kompleksnost implementacije na strani korisnika. Za ove usporedbekoristili smo LDAP implementaciju i
ISODE DAP implementaciju. Koristili smo isti DSA za sva mjerenja, koji je osiguravao osnovicu za usporedbu.Tablica 1 prikazuje izvedbu rangea tipičnih DAP i LDAP upita. Testovi su provedeni na računalu koje su koristili LDAP i Dap korisnici, LDAP server, i DSA. Kao što se može vidjeti iz tablice kašnjenje koje unosi LDAP je minimalno. Ovo kašnjenje se može eliminirati DSA implementacijom, eliminirajući središnje dekodiranje, kodiranje i prijevod protokola.
Query |
DAP |
LADP |
Unauthenicated bind |
30 |
68 |
Authenticeted bind |
34 |
56 |
Simple search (one entry) |
32 |
41 |
Simple search (50 entries) |
293 |
353 |
Tablica 1.( vrijeme je u mili sekundama)
Tablica 2. prikazuje veličinu upita i rezultate dane u tablici 1. Pokazuje da su LADP upiti znatno manji nego ekvivalntni DAP upiti. Ušteda je posljedica pojednostavljena DN i dekodiranje vrijednosti. Veličine upita su također smanjene jer nema kontrola u svakoj operaciji.
Query |
DAP |
LADP |
Unauthenicated bind |
192 |
14 |
Authenticeted bind |
409 |
138 |
Simple search reqest |
237 |
105 |
Single search result |
547 |
355 |
Tablica 2. Usporedba veličine upita DAP-a i LDAP-a.( jedinice su u baytovima)
Tablice 3. i 4. pokazuju vrijeme koje je potrebno za kodiran
je i dekodiranje tipičnih DAP-ovih i LDAP-ovih PDU-a.One pokazuju da LDAP ima skromnu prednost za jednostavni PDU no znatno veću prednost za kompleksne PDU-ove. Posebno one koji sadržavaju posebna imena gdje je LDAP veliki pobjednik.
PDU complexity |
DAP |
LADP |
Simple |
550 |
110 |
Medium |
7,925 |
714 |
Complex |
38,393 |
2,702 |
Tablica 3. Usporedba vremena dekodiranja DAP-a i LDAP-a .
Elemente LDAP protokola je jednostavnije dekodirati, ogotovo za kompleksnije PDU-ove. Kompleksni PDU sadrž
i atributa sa gotovo 600 DN. Otprilike polovica vremena DAP-ovog dekodiranja je potrošena na provjere, da bi osigurali da jedan atribut ima samo jednu od vrijednosti.
PDU complexity |
DAP |
LADP |
Simple |
24 |
6 |
Medium |
1,084 |
324 |
Complex |
2656 |
989 |
Tablica 4. Usporedba vremena kodiranja DAP-a i LDAP-a.
Elementi LDAP-ovog protokola se kodiraju znatno učinkovitije, posebno za kompleksne PAD.
Na kraju uspoređujemo veličinu i kompleksnost implementacije.Neki zaključci koji govore u korist LDAP-a se mogu izvući iz velike prednosti koje ima u ovom području, kao što je prikazano u tablici 5.
Za usporedbbu veličine koristili smo Directory Enquiries client. Može se izvesti da koristi DAP ili LDAP za X.500 komunikaciju. Kompleksnost koda ISODE DAP i LDAP-a je također uspoređivana. Korištene su dvije mjere za kompleksnost. Prvo broj redova koda, koji aproksimira broj naredbi. Drugo, broj "if" naredbi, aproksimira broj "code paths". Pregledavan je samo kod koji je potreban za pristup X.500.
Metric |
DAP |
LADP |
Total size |
1,484,568 |
334,552 |
Text |
958,464 |
221,184 |
Data |
385,024 |
73,728 |
BSS |
141,080 |
39,640 |
Semicolon count |
46,746 |
1,989 |
If count |
9369 |
568 |
Tablica 5. Usporedba komleksnosti implementacije DAP-a i LDAP-a.
7.RAD U BUDUĆNOSTI
LADP je uspio u stavaranju X.500 pristupačnijim i uvelike je odgovoran za porast u razvoju X.500. Usprkos uspjehu, razvoj X.500 na Internetu je razočaravajući. Jedan od razloga je teško korištenje X.500 servera; da bi iskoristili prednost LDAP-a prolikom
dohvata podataka, site mora osigurati potpunu X.500 podršku. Da bi se riješio ovaj problem razvija se stand-alone LDAP server ili slapd . Slapd omogućuje istu LDAP funkcionalnost koja je opisana iznad ali je podržan od svoje baze podataka, a ne od X.500.Da
bi spriječili izolaciju stand-alone LDAP-ovih servera od ostatka svijeta , napravljena je kompatibilna extenzija LDAP-a koja dozvoljava povrat informacija korisniku. Ovo komplicira stvari s korisnikove strane da prati povrat informacija, ali zauzvrat smo dobili jednostavnost servera.Nova verzija X.500 standarda ima dosta dodataka koje nema stara verzija, a na kojim je zasnovan LDAP. Unutar novih dodataka je kontrola pristupa, replikacija, schema management, i razne DAP extenzije.
DAP extenzije uključuju mogučnost da se rezultati pretrage vraćaju stranu po stranu, odrediti limit byteova atributa koji će se vratiti, tretirati atribute DN-a kao dio unosa tokom pretrage , i dr. Operacije vezane za sigurnosna pitanja uključuju snažnu autentičnost, i potpis op
eracija.
8.ZAKLJUČAK
Lightweight Directory Access Protokol osigurava jednostavan pristup X.500 direktorijima. Radi direktno preko TCP-a, i čini nekoliko pojednostavljenja za puni X.500 DAP, izbacujući pritom puno opcija koje se rijetko koriste. LDAP koristi jednostavno kodiranje za večinu podataka, čineći ga tako učinkovitijim i lakšim za implementaciju nego DAP. Razvijena je implementacija LDAP-a koja se može koristiti na raznim platformama. Implementacija zasnovan na intermediate-serveru unosi malo kašn
jenje preko punog DAP-a.