LDAP

Peter Krut�, xkruty@fi.muni.cz


Obsah


Directory Service, X.500, LDAP

Directory Service je �pecializovan� slu�ba na ��tanie a preh�ad�vanie ve�k�ho mno�stva d�t. Nepodporuje, a ani to nie je cie�om, transakcie alebo roll-back sch�my, ktor� je mo�n� n�js� v in�ch, preva�ne rela�n�ch datab�zach. Directory Service je teda datab�za podporujuc� oper�cie pridania, modifik�cie alebo ru�enia, iba v jednoduchej forme.

Pr�kladom Directory Service je WHOIS, DNS alebo X.500. Protokol X.500 vznikol ako pokus o zov�eobecnen�, decentralizovan� a distribuovan� model adres�rovej slu�by. Ked�e sa v�ak uk�zalo, �e tak ako je navrhnut� je obtia�ne implementovate�n�, vznikol LDAP (Lightweight Directory Access Protocol) [ RFC3377] od�ah�en� protokol na pr�stup k X.500.


Ako vyzer� LDAP, strom, LDAP schema

Ak� inform�cie vieme uschova� do LDAP?

Datab�za LDAP m� tvar stromu, kde z�kladanou informa�nou jednotkou je "objekt" (entry), �o je vlastne uzol dan�ho stromu - datab�zy. Objekt je kolekcia atrib�tov a je jednozna�ne pomenovan� tzv. DN (Distinguished Name). Ka�d� atrib�t objektu ma typ a jednu alebo viac hodnot. Typ je �asto mnemotechnick� re�azec ako cn (Common Name), gecos (Unixovy GECOS z�znam z /etc/passwd), mail alebo jpegPhoto, �o z�rove� napoved� ak� hodnoty tieto atrib�ty maj�.

Ako s� inform�cie organizovan�?

Ako je uveden� vy��ie datab�za LDAPu je vlastne strom, ktor� nem� predom dan� �trukt�ru, av�ak existuj� zvyklosti ako m� vyzera�. Zvy�ajne reflektuje �trukt�ru organiz�cie, v ktorej je LDAP pou��van�. Tak jednotliv� �rov�e stromu odpovedaj� organiza�n�m jednotk�m v danej organiz�ci�. Druhou mo�nos�ou je usporiada� strom pod�a hierarchie dom�n danej organiz�cie v DNS. Oba pr�stupy s� na obrazku [zdroj:
OpenLDAP 2.1 Administrator's Guide]:
Strom reflektuj�ci hierarchiu DNS Strom reflektuj�ci hierarchiu organiz�cie

Ako s� inform�cie odkazovan�?

DN dan�ho objektu je (ako je mo�n� vidie� na obr�zku) vlastne cesta s dan�ho objektu (uzlu stromu) k vrcholu. Teda napr. na obr�zku vid�me objekt s DN: uid=babs,ou=People,dc=example,dc=com (�o znamen�, �e objekt z uid (Uniq ID) babs sa nach�dza v ou (Organization Unit) People pod dc (Domain Component - odpoved� subdom�ne) v dc com. Tento strom teda pou��va model odpovedaj�ci dom�novej hierarch�, kde v subdom�nach najni�sej �rov�e sa nach�dzaj� �al�ie podstromy pre organiza�n� jednotky v danej organizaci�. S t�mto s�vis� aj pojem RDN (Relative Distinguished Name), �o je �as� DN, ktor� identifikuje objekt v danom podstrome. Teda napr. v na�om pr�klade je RDN napr. uid=babs.

Ako s� inform�cie pop�san�?

LDAP �alej dovoluje definova�, ktor� atrib�ty objektu s� vy�adovan� a ktor� povolen� definovan�m triedy objektu pou�it�m atrib�tu objectclass. Tento atrib�t je ako ka�d� in�, teda je mo�n� s n�m pracova� ako s ostan�mi atrib�tmi. Rozdiel je v tom, �e pri manipul�ci� s obsahom LDAP datab�z� sa berie oh�ad na tento atrib�t, ktor� obsahuje men� tried, do ktor�ch patr� dan� objekt a tak definuje mo�n� obsah dan�ho objektu - typy a hodnoty a atrib�tov, ktor� s� pop�san� v v LDAP Sch�me. LDAP Sch�ma popisuje triedy objektov a typy atrib�tov. To znamen� ak� atrib�ty objekt obsahuje a ak� hodnoty atrib�ty nadob�daj�. Sch�ma je takmer vzdy nemenn� zoznam tried a typov, napr. v implementaci�
OpenLDAP ulo�en� v textov�ch s�boroch, ktor� si LDAP server pri �tarte na��ta (pop�sane s� pomocou EBNF). Sch�mu je samozrejme mo�n� si roz��ri� resp. upravi� pod�a vlastn�ch potrieb, ale takmer v�dy si vysta��me s u� preddefinovan�mi triedami.

Pr�kladom triedy je napr. trieda posixAccount a trieda shadowAccount. Obe boli definovan� na to aby bolo mo�n� autentizova� u�iva�elov presne tak ako funguje autentiz�cia pomocou s�borov /etc/passwd a /etc/shadow, teda aj atrib�ty t�chto tried odpovedaj� z�znamom v pr�slu�n�ch s�boroch. Triedy posixAccount a shadowAccount vyzeraj� nasledovne (pod�a Ldap Schema Viewer):

posixAccount shadowAccount

Atrib�ty vy�adovan�:

cn: Common Name
uid: Uniq ID
uidNumber: unixov� uid
gidNumber: unixov� gid
homeDirectory: domovsk� adres�r
objectClass: hodnota je posixAccount a pr�padne �al�ie

Atrib�ty povolen�:

userPassword: heslo
loginShell: shell
gecos: GECOS z�znam odpovedaj�ci z�znamu z /etc/passwd
description: popis objektu

Atrib�ty vy�adovan�:

uid: Uniq ID
objectClass: hodnota je shadowAccount a pr�padne �al�ie

Atrib�ty povolen�:

userPassword: heslo
shadowLastChange:
shadowMin:
shadowMax:
shadowWarning:
shadowInactive:
shadowExpire:
shadowFlag:
description: popis objektu

Ako s� inform�cie chr�nen�?

LDAP poskytuje mechanizus autentiz�cie klienta, umo�nuje pop�sa� kto m� ak� pr�va k dan�mu objektu, pri�om poskytuje okrem tradi�n�ch pr�v na ��tanie z�pis, preh�ad�vanie aj pr�vo na porovnanie, kedy jedinou inform�ciu, ktor� dotazuj�ci sa klient dostane je �no/nie pod�a v�sledku porovnania. Implement�cia OpenLDAP podporuje nat�vne SSL alebo spolupr�cu so SASL.

Ako LDAP pracuje?

LDAP pracuje na modele server-klient. Jeden alebo viac serverov poskytuje klientom inform�cie v datab�ze, pri�om datab�za je bu� z�ie�an� a replikuje sa z jedn�ho na ostatn� alebo je strom zdie�an�, tak �e �as�i stromu s� na in�ch serveroch. Klient polo�� ot�zku, ktor�muko�vek serveru a ten bu� odpovie ak odpove� pozn� alebo klientovi po�le odkaz na server kde je odpove�.

OpenLDAP

Technicky je LDAP protokol na pr�stup k X.500 adres�rovej slu�be (mimochodom X.500 je OSI adres�rov� slu�ba �o sa prejavuje na jej "�a�koton�nosti"). Povodne LDAP klienti pristupovali ku gatewayi pre X.500. Tak�to gateway komunikovala protkolom LDAP s LDAP klientom a protokolom X.500 DAP (Directory Access Protocol) s X.500 serverom. DAP je protokol, ktor� pracuje nad OSI modelom, a vy�aduje nezanedbate�n� syst�mov� prostriedky, naopak LDAP je narhnut� nad TCP/IP a poskytuje va�inu funkcionality DAPu s men��mi n�kladmi.

Aj ke� je LDAP st�le pou��van� ako gateway pre X.500, LDAP je �astej�ie priamo imlementovan� v X.500 serveroch. Najpou��vanej�ia implement�cia LDAPu je OpenLDAP. Pou��va dva d�mony slapd a pr�padne slurpd. slapd(8) je vlastne od�ah�en� X.500 server. Neimplementuje DAP, ale iba podmno�inu jeho funkcionality pomocou LDAP. slurpd je replika�n� server, zodpovedn� za distrib�ciu zmien spraven�ch v master slapd datab�ze na in� (z�lo�n�) servery.

OpenLDAP implementuje LDAPv3, slapd podporuje LDAP nad IPv4 aj IPv6, autentiz�ciu pomocou SASL (konkr�tne Cyrus SASL), TLS a SSL pomocou OpenSSL, UNICODE alebo pr�stup z najpopul�rnej��ch skriptovac�ch jazykov (Perl, Shell, SQL a Tcl).


Konfigur�cia

slapd.conf

Hlavn� konfigura�n� s�bor OpenLDAPu je /etc/slapd.conf. Po odstr�nen� koment�rov vyzer� napr. takto:
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/redhat/rfc822-MailMember.schema
include         /etc/openldap/schema/redhat/autofs.schema
include         /etc/openldap/schema/redhat/kerberosobject.schema

TLSCertificateFile    /usr/share/ssl/certs/slapd.pem
TLSCertificateKeyFile /usr/share/ssl/certs/slapd.pem
TLSCACertificateFile  /usr/share/ssl/certs/slapd.pem

database        ldbm
suffix          "dc=organizacia, dc=korporacia, dc=com"
rootdn          "cn=admin, dc=organizacia, dc=korporacia, dc=com"
rootpw          {MD5}HESLO
directory       /var/lib/ldap
index   objectClass,uid,uidNumber,gidNumber     eq
index   cn,mail,surname,givenname               eq,subinitial
defaultaccess   none
sizelimit       100000

replica host=ldap.organizacia.korporacia.com
	    binddn="cn=replicator,dc=organizacia,dc=korporacia,dc=com"
	    bindmethod=simple credentials=""XXXXXXX"
replogfile /var/lib/ldap/ldap.replog

access to dn=".*ou=group,dc=organizacia,dc=korporacia,dc=com"
	by dn="cn=backup,ou=admins,dc=organizacia,dc=korporacia,dc=com" read
	by domain=.* read 
access to dn=".*ou=people,dc=organizacia,dc=korporacia,dc=com"
	by dn="cn=backup,ou=admins,dc=organizacia,dc=korporacia,dc=com" read
	by domain=.* read
access to "dn=.*ou=admins,dc=organizacia,dc=korporacia,dc=com"
	by dn="cn=backup,ou=admins,dc=organizacia,dc=korporacia,dc=com" read
	by * compare
access to "dn=.*"
	by dn="cn=backup,ou=admins,dc=organizacia,dc=korporacia,dc=com" read
	by * read
V uvedenom konfigura�nom s�bore mus�me definovat kde m� LDAP pri �tarte h�ada� sch�mu svojho stromu - teda ako bud� vyzera� inform�cie v datab�ze. �alej je mo�n� definova� DN spr�vcu datab�zy a jeho heslo. Heslo sa vo svete LDAPu zapisuje obvykle vo forme {typ}hash, teda napr. {MD5}Md5_HaSh_HeSlA, takto ho n�jdeme ulo�en� aj v datab�ze a� na to, �e cel� tento re�azec je naviac zakodovan� Base64 (pre n� re�azec to bude: e01ENX1NZDVfSGFTaF9IZVNsQQ==). Nakoniec zmienim mo�nos� definova� pr�stupov� pr�va na dan� objekt datab�zy direkt�vou access, kde na dan� objekt (napr. dn=".*ou=group,dc=organizacia,dc=korporacia,dc=com") definujeme napr�klad pr�vo ��tania pre dn="cn=backup,ou=admins,dc=organizacia,dc=korporacia,dc=com" a pre domain=.* (teda pre objekt v datab�ze s dan�m DN a pre pr�stup z akejko�vek dom�ny). Detaily vi� slapd.conf(5).

nsswitch.conf

Tento s�bor definuje ak�m sposobom sa maj� pre rozne syst�mov� tabu�ky vyh�ad�va� inform�cie. To znamen� napr. pre datab�zu u�ivate�ov alebo preklad mien (DNS) �i pre datab�zu slu�ieb (�tandartne v /etc/services). S�bor vyzer� napr�klad takto:
passwd:     files nisplus
shadow:     files nisplus
group:      files nisplus

hosts:      files nisplus dns

ethers:     files
netmasks:   files
networks:   files
protocols:  nisplus [NOTFOUND=return] files
rpc:        files
services:   files nisplus

automount:  files nisplus
aliases:    files nisplus
V s�bore je pre jednu tabu�ku (jeden typ slu�by) ur�en� riadok, tak �e na za�iatku je identifikovan� tabu�ka a potom usporiadan� zoznam pod�a, ktor�ho sa bude napr. preklada� dom�nov� meno. Teda ak riadok obsahuje:
hosts: files nisplus ldap dns
najprv sa meno bude h�ada� v lok�lnych konf. s�boroch (/etc/hosts) v pr�pade ne�spechu sa bude sk��a� NIS, potom LDAP a nakoniec sa pou�ije DNS dotaz. V pr�pade, �e do zoznamu uvedieme [NOTFOUND=return] h�adanie sa zastav� ak h�adanie v predch�dzaj�cej polo�ke ni� nevr�tilo. Ak v�ak h�adanie skon�ilo ne�spechom, preto�e slu�ba nebola dostupn� pokra�uje sa �alej.

nscd a nscd.conf

nscd (Name Service Cache Daemon) je d�mon, ktor� rob� cache pre dotazy na rozne syst�mov� tabu�ky, DNS in�. Konfigura�n� s�bor sa nach�dza v /etc/nscd.conf a vyzer� napr�klad takto:
server-user             nscd
debug-level             0

enable-cache            passwd          yes
positive-time-to-live   passwd          600
negative-time-to-live   passwd          20
suggested-size          passwd          211
check-files             passwd          yes

enable-cache            hosts           yes
positive-time-to-live   hosts           3600
negative-time-to-live   hosts           20
suggested-size          hosts           211
check-files             hosts           yes
Definuje slu�bu pre ak� sa m� cachovanie vykon�va� a rozne parametre pre dan� cache. Je vhodn� cachovanie zapn�� z dovodu zn��enia dotazov napr. na LDAP server.

Pr�ca s LDAP

Na pr�cu s LDAPom n�m sl��i mnoho n�strojov z�kladom je bal�k ldap-clients, obsahuj�ci programy ako ldapsearch, ldapadd, ldapmodify a podobne. V�etky tieto programy pou��vaj� form�t LDIF (LDAP Data Interchange Format, vid. ldif(5)), ktor� vyzer� napr�klad takto:
dn: uid=xkruty,ou=People,dc=fi,dc=muni,dc=cz
uid: xkruty
cn: xkruty
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
userPassword:: e2NyeXB0fXg=
loginShell: /bin/zsh
uidNumber: 13644
gidNumber: 10100
homeDirectory: /home/xkruty
gecos: Peter Kruty
host: aisa
host: anxur
host: atys
host: erigona
host: erinys
host: nereus
host: nymfe
host: oreias
host: pyrrha
LDIF obsahuje jednu dvojicu atrib�t: hodnota na jednom riadku. Tento v�pis sme z�skali pr�kazom:
$ ldapsearch -h ldap.fi.muni.cz -b 'dc=fi,dc=muni,dc=cz' -x -LLL 'uid=xkruty'
Parametre znamenaj�:

-h LDAP server, ktor�mu sa polo�� ot�zka
-b base ot�zky, teda podstrom v ktorom sa m� vyh�ad�vat
-x pou�ije sa jednoduch� autentiz�cia namiesto SASL
-LLL v�pis bude v LDIFv1 form�te bez koment�rov a verzie LDIFu
'uid=xkruty' vyh�ad�vac� filter

Tento pr�kaz teda n�jde na serveri ldap.fi.muni.cz v podstrome 'dc=fi,dc=muni,dc=cz' v�etky objekty, ktor� maj� hodnotu atrib�tu uid rovn� 'xkruty'. Pr�klad modifik�cie LDAP datab�zy:


Odkazy