LDAP - Adresářové služby

Miloš Liška, xliska@fi.muni.cz


Obsah


Adresářové služby

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].


Software

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.


Instalace

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

Konfigurace serveru

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

Provoz OpenLDAP serveru

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:

	suffix  
např.:
	suffix "o=lab.fi.muni, c=cz"
adresář, do kterého může slapd zapisovat. NApř.:
	directory /usr/local/lab.fi.muni 
a položky
	rootdn 
	rootpw    /* Remember to use a SHA password here !!! */ 
pro 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.

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.cz
a 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:

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).


Další informace

Konverzní utility

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.


Literatura

LDAP Howtohttp://www.tldp.org/HOWTO/LDAP-HOWTO/
TEN-155 CZ č. 4/2000Adresář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/