LDAP
Jiří Novotný, xnovotn5@fi.muni.cz
Obsah
Základní informace
Adresář
- (v IT/telekomunikačním významu)
- Něco jako kontejner/repozitář/omezená databáze obsahující různé typy objektů.
- Předpokládá se, že se v nich bude hlavně číst, procházet a vyhledávat. Modifikace jsou obvykle také možné, ale adresáře s vyšším objemem zápisových operací příliš nepočítají; např. nejsou podporovány transakce, nemusí disponovat vyrovnávací pamětí pro zápisy, atd. Obecně lze předpokládat, že na 1 zápis by mělo připadnout aspoň 1000 čtení.
- Data mohou být uložena různým způsobem; záleží na adresáři.
Adresářová služba
- Obecně aplikace pro práci s nějakým typem adresáře - poskytuje k němu přístup. Nemusí se vždy jednat o aplikaci, může to být také součást operačního systému.
Pod pojem adresářová služba se často zahrnuje i adresář.
LDAP
- Lightweight Directory Access Protocol
- Aplikační protokol (na nejvyšší vrstvě), pracuje na principu klient-server.
- Protokol pro přístup k adresářovým službám založených na skupině standardů X.500. To měl původně zajišťovat X.500 Directory Access Protocol (DAP), který tehdy vyžadoval síťování založené na OSI modelu (na návrhu X.500 se mj. podílela i organizace ISO:). LDAP vznikl jako odlehčená varianta, které stačí TCP/IP model.
- Nyní se používá převážně ve verzi 3, která je popsána v dokumentu RFC 4510.
- Specifikace definuje 4 modely, které jsou podrobněji popsány dále.
Někdy se označuje pojmem LDAP i server nebo adresář, pracující s protokolem LDAP.
Příklady adresářových služeb
Vzniklo před X.500: DNS, NIS, Doména Windows (předchůdce Active Directory).
Založeno na X.500/LDAP: Red Hat Directory Server, IBM Tivoli Directory Server, eDirectory, Active Directory, OpenLDAP, ad.
Informační (datový) model
Adresářové služby, které jsou založené na X.500/LDAP, reprezentují data ve stromové struktuře, nazvané Directory information tree (DIT). Jedná se o zakořeněný strom, jehož uzly i listy jsou jednotlivé záznamy v adresáři.
Záznam
- Základní objekt.
- Skládá se z atributů.
- Každý atribut v záznamu má přiřazenu aspoň jednu hodnotu.
Atribut
- (pokud se nehovoří o atributu v záznamu, má na mysli vždy atribut deklarovaný, ne již definovaný/instancializovaný)
- Je vždy nějakého typu. To znamená, že má definovanou nějakou syntax a případně i další pravidla nebo omezení.
- Typ atributu může být potomkem nějakého jiného typu; pak dědí všechny vlastnosti, které má jeho rodič. Rodičů může být i více.
- Má vždy aspoň jedno unikátní jméno.
- Vždy patří aspoň do jedné objektové třídy.
Objektová třída
- Je to skupina atributů.
- Určuje pro tyto atributy, jestli v této třídě mohou/musí být.
- Přiřazuje se k záznamům. Pokud má záznam přiřazenu nějakou objektovou třídu, řídí se jejími pravidly. Tj. tato třída určuje atributy, které záznam smí/musí obsahovat.
- Každý záznam musí mít přiřazenu aspoň jednu třídu.
- Záznam může mít přiřazeno více tříd, i když s určitými omezeními.
- Může být potomkem nějaké jiné třídy; pak dědí všechny vlastnosti, které má její rodič. Rodičů může být i více.
- Má vždy aspoň jedno unikátní jméno.
Schéma
- Obsahuje popisy atributů (tj. definice typů atributů) a definice objektových tříd.
- K tomu je používán jazyk Abstract Syntax Notation One, zkráceně ASN.1 notace.
- Některé atributy a objektové třídy nemusí být popsány v nějakém schématu, ale jsou přímo součástí příslušného LDAP serveru. Pak se jim říká operační atributy/třídy.
- Pokud atribut/třída mají nějakého rodiče, tento rodič nemusí mít popis v tom samém schématu.
- Je třeba, aby LDAP server měl k dispozici schémata, ve kterých jsou popsány všechny atributy/třídy, které tento server používá.
Jmenný model
Jak je uvedeno výše, jednotlivé objekty (tj. záznamy) jsou reprezentovány stromovou strukturou DIT.
U každého záznamu některé jeho atributy (obvykle pouze jeden atribut) tvoří identifikátor: Relative Distinguished Name (RDN). Tento identifikátor musí být jedinečný mezi všemi svými sourozenci ve stromové struktuře.
Řada, skládající se z RDN záznamu a RDN všech jeho předků až ke kořenu, tvoří tzv. Distinguished Name (DN). To jednoznačně identifikuje konkrétní záznam i jeho polohu v DIT.
Příklad DN: cn=Jan Novák,ou=zamestnanci,dc=firma,dc=cz
Příklad RDN: cn=Jan Novák
Funkční model
Zahrnuje dotazování, úpravy a autentizaci (které požaduje klient a provádí server) pomocí LDAP nad DIT. Konkrétní operace jsou:
Prohledávání (search)
- Je třeba nastavit aspoň od jakého záznamu se bude hledat, rozsah hledání a filtr.
- Dále je ještě možné např. omezit věci jako počet navrácených záznamů, max. čas hledání nebo nezajímavé atributy.
Srovnání (compare)
- Klient se dotazuje, jestli se nějaké atributy v nějakém záznamu shodují s nějakou hodnotou. Server odpovídá jen ANO či NE.
Smazání (delete)
- Mazaný záznam musí být list, tj. nesmí mít potomky.
Přejmenování (rename)
- Záznam musí vyhovět omezením popsaným výše v jmenném modelu.
Úprava (modify)
- Záznam musí vyhovět omezením popsaným výše v informačním modelu.
Přidání (add)
- Přidávaný záznam musí dostat rodiče.
- Dále platí požadavky pro operace přejmenování a úpravy, uvedené výše.
Připojení/odpojení (bind/unbind)
- Autentizace klienta oproti LDAP serveru + vytvoření relace. Ukončení relace + odhlášení.
Zrušení (abandon)
- Ruší nějakou operaci, kterou zrovna provádí server (např. prohledávání, které se už téhne příliš dlouho). Server zrušení operace klientovi nepotvrzuje.
Bezpečnostní model
V podstatě hlavně autentizace/autorizace klienta, dále ještě zabezpečení komunikace přes SSL/TLS.
Autentizace je možná více způsoby:
- Anonymní klient
- Nezabezpečené heslo
- Heslo přes TLS/SSL kanál
- Proxy uživatel
- Jiný uživatel, který může autentizovat přihlašovaného uživatele a dát o tom vědět LDAP serveru.
- PKI (klientským certifikátem)
- SASL (Simple Authentication and Security Layer)
- Framework, který definuje několik standardních mechanismů pro autentizaci.
- Je možno použít libovolný mechanismus, pokud ho podporují klient i LDAP server.
Při přihlášení heslem se obvykle zadává jako jméno uživatele DN objektu, který by měl mít atribut typu userPassword nebo authPassword.
Autorizace není součástí LDAP standardu. Některé LDAP servery ale implementují tzv. Access Control List (ACL). Obecně vzato: ACL určuje, kteří autentizovaní uživatelé mohou provádět které operace (viz funkční model) nad kterými záznamy.
Literatura