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) 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 - 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 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é
ldapsearch -h ldap://ldap.fi.muni.cz -x -b uid=xelich,ou=People,dc=fi,dc=muni,dc=czParametry:
-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 -f /tmp/newentrypřidá položku z LDIF souboru newentry
ldapdelete 'uid=xelich,ou=People,dc=fi,dc=muni,dc=cz'odstraní položku xelich
ldapmodify -f /tmp/modifyentryzmění položku, kde cesta k ní a její nový obsah je popsán v souboru /tmp-modifyentry ve formátu LDIF
dn: uid=xelich,ou=People,dc=fi,dc=muni,dc=cz changetype: modify add: description description: ahoj
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).
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 * readDá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/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
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.
replica uri=ldaps://slave.example.com:636 binddn="cn=Replicator,dc=example,dc=com" bindmethod=simple credentials=secretobecně:
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í.
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:
cn: Common Name uid: Uniq ID uidNumber: unixové uid gidNumber: unixové gid homeDirectory: domovský adresář objectClass: posixAccountVolitelné atributy:
userPassword: heslo loginShell: shell gecos: GECOS záznam odpovídající záznamu z /etc/passwd description: popis objektu
uid: Uniq ID objectClass: shadowAccountVolitelné atributy:
userPassword: heslo shadowLastChange: shadowMin: shadowMax: shadowWarning: shadowInactive: shadowExpire: shadowFlag: description: popis objektu