LDAP (Lightweight Directory Access Protocol)

Martin Elich, xelich@fi.muni.cz


Obsah


Adresářové služby

Adresářová služba je specifická aplikace pro ukladání dat, jejich organizaci a přístup k nim. Data jsou zjednodušeně řeceno uložena ve forme položek, kde každá položka obsahuje několik atributů, které jsou nositelem hodnoty. Každá položka má jedinečné jméno a každý atribut má unikátní jméno vrámci konkrétní položky. Položka je hierarchicky uspořádaná, je umístena v adresářovém stromu (DIT - Directory Information Tree). Tento datový model je vhodný pro časté dotazy a spíše sporadické aktualizace. Je to dáno tím, že adresářové služby jsou primárně určeny pro rychlé vyhledávání.

Jako jednoduchý příklad použití adresářových služeb lze považovat aplikace jako telefoní seznam. V tomto případe mohou položky reprezentovat jednotlivé lidi a atributy informace jako je telefoní císlo, adresa, e-mail apod. V případě telefoního seznamu mohou adresářové služby odpovídat třeba na dotaz typu "hledám uživatele s timto telefoním číslem".


LDAP (Lightweight Directory Access Protocol)

LDAP (Lightweight Directory Access Protocol) je standardizovaný protokol pro přístup k adresářovým službám, definuje komunikaci mezi serverem a klientem. LDAP byl vytvořen jako náhrada težko implementovatelného protokolu X.500 (DAP), jehož základních principu využívá. Narozdíl od protokolu X.500 LDAP beží nad internetovými transportními protokoly jako je TCP/IP, což prináší výrazné zjednodušení. Stejne jako X.500 poskytuje LDAP datový model a model prostoru jmen pro adresár. LDAP je založen na modelu klient-server a pro uložení dat na serveru je použita adresárová struktura. Jestliže se klient připojí na server a zadá požadavek, tak mu server bud přímo odpoví a nebo ho odkáže na jiný server, který mu je schopen odpovědět. První verze LDAPu vyžadovala ke svému provozu X.500 server, ale od druhé verze je LDAP na X.500 zcela nezávislý. Zatím poslední třetí verze prináší oproti druhé verzi hlavne zvýšenou bezpecnost (lepší autentizaci, prodpora pro prenos šifrovaných dat). Pod pojmem LDAP od druhé verze neruzumíme pouze komunikační protokol, ale i vlastní adresárový server.

ldapv3 umožňuje 3 druhy autentizace, a to anonymous, simple a SASL. "Simple Authentication and Security Layer" definovana v RFC 2222 specifikuje protokol pro datovou vyměnu mezi klientem a serverem za učelem autentizace a zabezpečení další komunikace. Podrobnosti na strankach http://asg.web.cmu.edu/sasl/sasl-library.html


LDAP strom objektu

LDAP strom - databáze LDAP má tvar stromu, kde základní jednotkou je objekt (entry), nebo uzel daného stromu. Objekt je jednoznacne pojmenovaný tzv. DN (Dinstinguished Name). Každý atribut objektu má typ a jednu nebo víc hodnot. DN daného objektu je cesta z daného objektu (uzlu stromu) k vrcholu. Na vzorovém stromu vidíme objekt s DN: uid=elich,ou=fi,o=muni,c=cz

          /\
         /  \
        /    \
  (c=sk)  (c=cz)              //stat (Country)
             |
            (o=muni)          //organizace (Organization) 
             /\
            /  \
           /    \
     (ou=fi)    (ou=law)      //organizacní jednotka (Organization Unit) 
         /         
        /
       /
(uid=elich)                   //osoba

LDAP schéma

LDAP schéma je množina pravidel nad adresářem - rozhoduje o poctech, typech, významem a jiných vlastnostech položek a atributu v adresáři. Urcuje třídy objektu (object classes), určující jaké položky (objekty) mohou být uloženy v adresáři. Třída určuje počet a typ atributů, které se mohou v položce nacházet (kontrola probíhá procesem zvaným schema-checking). Každá položka (objekt) pak má povinný atribut objectClass, určující v jaké třídě se položka nachází. Třídy mohou samozřejme dědit od jiných tříd (objektový model), pričemž je definována nejvyší trída, která má jediný atribut a tím je práve objectClass, od této trídy (nazývané top) pak musí být odvozeny všechny ostatní třídy. Aby byla možná spolupráce mezi LDAP servery (každý z nich muze mít nadefinováno vlastní schéma) existuje několik standardizovaných schémat. Pokud klient schéma adresáře nezná, dotazuje se na speciální položku.

V implementaci OpenLDAP je uložená v textových souborech, které si LDAP server při startu načte. Schéma je samozřejmě možné upravit podla vlastních potřeb, ale většinou to není nutné


Nástroje pro práci s LDAP

ldapsearch - Prohledává adresářový strom.

Příklad použití:
ldapsearch -h ldap://ldap.fi.muni.cz -x -b uid=xelich,ou=People,dc=fi,dc=muni,dc=cz
Parametry:
-h URI LDAP serveru, kterému se položí otázka
-b base otázky(podstrom ve kterém se má vyhledávat)
-x použije se jednoduchá autentizace místo SASL

ldapadd - Přidání položky do adresářového stromu.

Příklad použití:
ldapadd -f /tmp/newentry
přidá položku z LDIF souboru newentry

ldapdelete - Odtsranení položky z adresářového stromu.

Příklad použití:
ldapdelete 'uid=xelich,ou=People,dc=fi,dc=muni,dc=cz'
odstraní položku xelich

ldapmodify - Modifikace adresářového stromu.

Příklad použití:
ldapmodify -f /tmp/modifyentry
změní položku, kde cesta k ní a její nový obsah je popsán v souboru /tmp-modifyentry ve formátu LDIF

příklad souboru:
dn: uid=xelich,ou=People,dc=fi,dc=muni,dc=cz
changetype: modify
add: description
description: ahoj

GQ - klientský software postavý na GTK


OpenLDAP

Je jedna z mála volne šiřitelných implementací LDAPu, ke stažení je na stránkách http://www.openldap.org

Používá dva démony slapd a slurpd. Slapd je implementace LDAPu. Slurpd je replikační server, zodpovědný za distribuci změn v master slapd databázi na jiné (většinou záložní) servery. OpenLDAP implementuje LDAP verze 3, slapd podporuje LDAP nad IPv4 i IPv6, autentizaci pomoci SASL, TLS a SSL pomocí OpenSSL, UNICODE a přístup ze skriptovacích jazyků (Perl, Shell, SQL a Tcl).


Konfigurace OpenLDAP

slapd.conf - zde se nachází globální konfigurace, konfigurace backendu a konfigurace databáze a přístupu. Ukázková konfigurace je v adresáři /usr/local/etc/openldap, ukázkové schéma adresářového stromu v /usr/local/etc/openldap/schema.

Nastavení přístupu uživatelů, tzn co mohou, nemohou dělat.

Příklad:

       access to *
                by self write
                by anonymous auth
                by * read
Dává prístup ke všem objektum tak, že:
"záznam sám" muže v sobe měnit data
anonymní uzivatel se muže jako záznam prihlásit (nic jiného)
a ostatní (prihlášení) uživatelé mohou záznam číst

nsswitch.conf - definuje jakým jak se mají pro různé systémové tabulky vyhledávat informace.

nscd a nscd.conf - nscd (Name Service Cache Daemon) je démon, který dělá cache pro dotazy na ruzné systémové tabulky, DNS a jiné.

více na http://www.openldap.org/doc/admin21/ nebo http://www.linux.cz/linuxdoc/HOWTO/LDAP-HOWTO/


Konfigurace OpenLDAP klienta

Prosprávnou funkci klienta je nutné provést nastavení souboru ldap.conf:
host 127.0.0.1                                       //IP LDAP serveru, v tomto případě běží klient na stejném počítači jako server
base dc=fi,dc=muni,dc=cz                             //odpovdá suffixu nastaveném v konfiguračním souboru serveru slapd.conf 
rootbinddn uid=xelich,ou=People,dc=fi,dc=muni,dc=cz  //říká kdo bude navazovat spojení s LDAP serverem (bind), heslo v souboru ldap.secret
scope one 
pam_filter objectclass=posixaccount 
pam_login_attribute uid
pam_member_attribute gid 
pam_password md5 
nss_base_passwd ou=People,dc=fi,dc=muni,dc=cz?one 
nss_base_shadow ou=People,dc=fi,dc=muni,dc=cz?one 
nss_base_group ou=Group,dc=fi,dc=muni,dc=cz?one 

Replikace

O replikaci se stará slurpd deamon a pro její funkčnost je nutné v konfiguracním souboru LDAP serveru nastavit jestli se jedná o master nebo slave. U masteru to znamená přidat položky replica s příslusnými adresami sekundární LDAP serveru.


Například:
replica uri=ldaps://slave.example.com:636
        binddn="cn=Replicator,dc=example,dc=com"
	bindmethod=simple credentials=secret
obecně:
replica host=[:]
        [bindmethod={ simple | kerberos | sasl }]
        ["binddn="]

V konfiguracním souboru slave serveru nesmíte nastavovat žádné položky replica a replogfile. Dále musíte nastavit vazbu na primární server pomocí položky uptdatedn (odpovídá příslušnému binddn na straně masteru). Konečným krokem je nakopírování databáze primárního serveru na sekundární.


posixAccount a shadowAccount

Jsou to třídy definované tak aby podle nich bylo možné autentizovat uživatele přesně tak jako funguje autentizace pomocí souboru /etc/passwd a /etc/shadow, atributy těchto tříd odpovídají záznamum v příslušných souborech.

Třídy posixAccount a shadowAccount vypadají následovne:

posixAccount

Povinné atributy:
cn: Common Name
uid: Uniq ID
uidNumber: unixové uid
gidNumber: unixové gid
homeDirectory: domovský adresář
objectClass: posixAccount
Volitelné atributy:
userPassword: heslo
loginShell: shell
gecos: GECOS záznam odpovídající záznamu z /etc/passwd
description: popis objektu

ShadowAccount

Povinné atributy:
uid: Uniq ID
objectClass: shadowAccount
Volitelné atributy:
userPassword: heslo
shadowLastChange:
shadowMin:
shadowMax:
shadowWarning:
shadowInactive:
shadowExpire:
shadowFlag:
description: popis objektu

Odkazy

LDAP Linux HOWTO
OpenLDAP
OpenLDAP 2.1 Administrator's Guide
www.biot.com GQ
Getting Started with LDAP
Adresářové služby - úvod do problematiky
LDAP Implementation HOWTO
LDAP Linux HOWTO