Základním příkladem použití adresářových služeb jsou aplikace jako telefonní seznam (seznam lidí), či databáze zdrojů, například tiskáren či aplikačních serverů. V případě telefonního seznamu mohou adresářové služby obsahovat položky reprezentující jednotlivé lidi, přičemž u každé položky jsou uvedeny atributy s informacemi jako je telefonní číslo, číslo kanceláře, e-mail apod. U objektů popisujících tiskárny může jít například o informace typu formát papíru, rychlost tisku, umístění či cena vytištěné strany.
Adresářové služby primárně dovolují uživatelům a aplikacím hledat objekty (lidi, zdroje) dle specifikovaných podmínek. Například jsou určeny pro zodpovídání dotazů typu "hledám uživatele a znám e-mail" nebo "hledám tiskárnu formátu A4, která umí tisknout barevně".
Adresářové služby mohou samozřejmě sloužit také k získávání informací o konkrétních objektech, tj. znám-li konkrétní specifikaci objektu (například jméno tiskárny), mohu se dotázat na její vlastnosti.
Adresářová služba je specializovaná aplikace pro ukládání dat, jejich organizaci a přístup k nim. Jednoduše řečeno jsou data uložena ve formě položek, kde každá položka obsahuje několik atributů. Atibuty mají přidělené hodnoty. Každá položka ma jedinečné jméno (v rámci všech položek) a každý atribut má unikátní jméno v rámci konkrétní položky. Položka je složená z hierarchicky uspořádaných částí. Logicky jsou položky adresářových služeb rozmístěny v adresářovém stromu (DIT - Directory Information Tree).
Příklad adresářového stromu:
Fakulta | | +----Zamestnanci | | | +--- | +--- | +--- | +----Studenti | +---Jmeno +---
Pro návrh členění adresářového stromu existuje mnoho různých postupů. Viz [DITDesign, NS-deploy].
Existují dvě volně šiřitelné vrze LDAP serveru: University of Michigan LDAP server a OpenLDAP server. Pro výukové účely je zdarma k dispozici i Netscape Directory Server.
Poslední verzi OpenLDAP serveru lze stáhnout zde: http://www.openldap.org
University of Michigan Server: ftp://terminator.rs.itd.umich.edu/ldap
Další popis se bude týkat OpenLDAP serveru.
Po rozbalení zdrojových souborů zkompilujeme OpenLDAP server následujícím způsobem:
$ ./configure $ make depend $ make
O korektním průběhu kompilace se přesvědčíme přikazem:
$ make test
Nakonec jako uživatel s rootovskými právy OpenLDAP nainstalujeme například takhle:
# make install
Soubor slapd.conf se skládá ze tří typů informací: golbální konfigurace, konfigurace backendu a konfigurace databáze. Instalace obsahuje ukázkovou konfiguraci v adresáři: /usr/local/etc/openldap. Ukázkové schéma adresářového stromu je v adresáři /usr/local/etc/openldap/schema.
Alespoň minimální konfiguraci démona slapd je možné najít v další části textu. Podrobnosti lze najít např. v [LDAP Howto].
LDIF - formát pro zápis adresářových položek
Popišme použití formátu LDIF pro zápis adresářových položek.
LDIF soubor se skládá z bloků dat oddělených prázdnou řádkou. Každý blok dat reprezentuje jednu položku. Základní struktura:
dn: <rozlišovací jméno> objectClass: <třída objektu> ... <jméno atributu>: <hodnota atributu> ...
Příklad položky:
dn: cn=Milos Liska, ou=Student, o=lab.fi.muni, c=cz objectClass: top objectClass: organizationalPerson cn: Milos Liska sn: liska mail: xliska@fi.muni.cz seeAlso: http://www.fi.muni.cz/~xliska
Démon slapd se spouští jako stand-alone server. Slapd má při spuštění mnoho různých parametrů. Nejčastější jsou:
Tvorba databáze za běhu
Balíček OpenLDAP obsahuje utilitu ldapadd, která se používá na přidávání záznamů za běhu serveru.
Než začneme přidávat položky do databáze, je dobré se ujistit, že v soubory slapd.conf máme následující položky:
suffixnapř.:
suffix "o=lab.fi.muni, c=cz"adresář, do kterého může slapd zapisovat. NApř.:
directory /usr/local/lab.fi.munia položky
rootdnpro vygenerování SHA hesla lze použít příkaz slappasswd -h {SHA}. Pokud se použije SASL jako autentizační mechanismus, je možné řádek rootpw vynechat.rootpw /* Remember to use a SHA password here !!! */
Dále je vhodné pomocí definice indexurčit, které záznamy se budou indexovat.
Jakmile máme slapd alespoň minimálně zkonfigurovaný, je možné nastartovat démona, připojit se k němu pomocí klienta a začít přidávat položky.
Příklad: Vytvoříme soubor /tmp/newentry
o=lab.fi.muni, c=cz objectClass=organization description=Laborator PV090 cn=Milos Liska, ou=student, o=lab.fi.muni, c=cz objectClass: organizationalPerson mail: xliska@fi.muni.cza v něm zapsané položky přidáme do databáze příkazem:
ldapadd -f /tmp/newentry -x -D "o=lab.fi.muni, c=cz" -W Enter LDAP Password:pomocí parametru -w lze heslo zadat i na příkazové řádce.
Tvorba databáze offline
Databázi lze tvořit i bez připojování k serveru. Položky vytvoříme obodobně jako v předchozím případě. K jejich přidání potom použijeme příkaz slapadd a to takto:
slapadd -l <inputfile> -f <slapdconfigfile>
Občas může být užitečné přegenerovat indexy v databázi. To provedeme příkazem:
slapindex -f <slapdconfigfile>
A konečně dump celé databáze provedeme takto:
slapcat -l <filename> -f <slapdconfigfile>kde parametr -l určuje výstupní soubor. Pokud tento parametr vynecháme, slapcat vypíše databázi na standartní výstup.
Prohledávání databáze
K prohledávání databáze slouží utilita ldapsearch. Základní použití vypadá takto:
ldapsearch -h <server> -b <báze> <filtr>
například:
ldapsearch -h agaue.lab.fi.muni.cz -b 'o=lab.fi.muni,c=cz' 'sn=liska'
Modifikace položek adresářového stromu
Ke změnám v adresářovém stromu se používají příkazy ldapmodify, ldapdeleteresp. ldapmodrdn.
Příkaz ldapmodify používá pro zadávání požadavků na modifikaci adresářových položek tzv. LDIF update formát. Základní syntaxe je:
dn: <rozlišovací jméno> changetype: <typ změny> <bližší specifikace změny> <seznam atributů> ... - <bližší specifikace změny> <seznam atributů> ...
Pro provádění základních změn uvnitř položky se užívá specifikace changetype:modify, přičemž bližší specifikace změny může být:
dn: cn=Milos Liska, ou=Student, o=lab.fi.muni, c=cz changetype: modify add: telephoneNumber telephoneNumber: *6183
Další typy změny jsou: add, delete a modrdn. Takto lze pomocí příkazu ldapmodify a příslušného LDIF vstupu zakládat, mazat a přejmenovávat položky.
Smazání položky je možno také realizovat příkazem ldapdelete.
Při operacích, které mění data v adresářovém serveru, je potřeba použít autentizaci a také zabezpečení komunikace (SSL).
Tzv. LDAP Migration Tools je sada prelových skriptů, která umožňuje konverzi databází jako je NIS nebo passwd do formátu LDIF, který používá LDAP.
Skripty a další informace lze najít na adresách: http://www.padl.com/tools.html nebo http://dataconv.org/apps_ldap.html
Autentizace pomocí LDAP
LDAP klient se nejprve musí autentizovat proti LDAP serveru aby mohl využívat jeho služby. Autentizaci je možné provést třemi způsoby. Jednak se přihlásit jako anonymní uživatel, nebo se autentizovat pomocí dvojice FQDN klienta a plantextového hesla. A konečně je možné se autentizovat pomocí SASL (Simple Authentication and Security Layer (RFC 2222)). SASL specifikuje challenge-response protokol pro výměnu dat mezi serverem a klientem za účelem autentizace a ustanovení bezpečného kanálu pro další komunikaci. Balíček Cyrus-SASL je dostupný zde: http://asg.web.cmu.edu/sasl/sasl-library.html.
LDAP lze využít i při autentizaci pomocí PAM (Pluggable Authentication Module). Zrojové soubory příslušného modulu lze najít zde: http://www.padl.com/OSS/pam_ldap.html.
LDAP Howto | http://www.tldp.org/HOWTO/LDAP-HOWTO/ |
TEN-155 CZ č. 4/2000 | Adresářové služby - úvod do problematiky |
[DITDesign] | Jim Rommel, Perot System Corporation: DIT Design. Electronic Messaging Association Conference 1998. |
[NS-deploy] | Netscape Communications, Netscape Directory Server 3.0 Deployment Guide, http://developer.netscape.com/docs/manuals/directory/deploy30/ |