Wikipedie[1] popisuje LDAP takto:
LDAP (Lightweight Directory Access Protocol) je definovaný protokol pro ukládání a přístup k datům na adresářovém serveru. Podle tohoto protokolu jsou jednotlivé položky na serveru ukládány formou záznamů a uspořádány do stromové struktury (jako ve skutečné adresářové architektuře). Je vhodný pro udržování adresářů a práci s informacemi o uživatelích (např. pro vyhledávání adres konkrétních uživatelů v příslušných adresářích, resp. databázích). Protokol LDAP je založen na doporučení X.500, které bylo vyvinuto ve světě ISO/OSI, ale do praxe se ne zcela prosadilo, zejména pro svou "velikost" a následnou "těžkopádnost".
Protokol LDAP je popsaný v RFC 4510-4521, RFC4510[2] je rozcestníkem k dalším RFC, které popisují detailně jednotlivé části protokolu.
LDAP je client-server protokol určený k přístupu k adresářovým službám, přistupuje k datům organizovaným ve stromové struktuře. Obvykle se pro přístup používá TCP v nešifrované podobě (port 389) nebo zabezpečené variantě pomocí SSL (port 636). Pro přístup k serveru je vyžadována authentizace, často je to jediná využitá služba klientem. Dalšími službami jsou vyhledávání, přidávání, odebírání, upravování, porovnávání, ... záznamů.
Protokol umožňuje distribuované nasazení pomocí replikací a delegací.
LDAP poskytuje přístup k adresárovým službám. Pojmem LDAP bývá často označován i vlastní server poskytující adresářové služby pomocí protokolu LDAP. Dále v textu bude LDAP označovat adresářový server, ke kterému je přistupováno pomocí LDAP protokolu.
Adresářový server je nerelační databází určenou pro časté čtení a občasné změny. Server nezaručuje transakční zpracování, formální správnost ani referenční integritu - tuto funkcionalitu si musí aplikace zajistit samy. Data jsou organizována ve stromové struktuře (DIT, Directory Information Tree), kde každý záznam má svoji jednoznačnou identifikaci (atribut DN, Distinguished Name).
Atribut DN je tvořen řetězem RDN (Relative Distinguished Name) v obráceném pořadí, kde jednotlivé RDN jsou odděleny ",". DN udává cestu ke kořenu stromu. Jednotlivé RDN jsou klíčové hodnoty, které mají k vlastní hodnotě přiřazen i sémantický význam. Příkladem může být DN: o=fi,dc=muni,dc=cz, který říká, že v doměné cz je doména muni, které obsahuje organizaci fi.
LDAP nepředepisuje pevné schéma objektů, ale objekty musí obsahovat atributy odpovídající jejich třídám (objectClass). Třídy se definují obvykle na úrovni celého serveru. Základní třídy jsou obvykle dodávány se serverem, dodavatel obvykle rozšíří schéma o třídy jím používané, další třídy získáme od dodavatele aplikace, která spolupracuje s LDAP serverem, případně si můžeme vytvořit vlastní schéma. Formát schémata není pevně stanoven a liší se mezi dodavateli serverů. Každy objekt vložený do adresáře musí obsahovat seznam objectClass, které nadefinují jeho povinné a nepovinné atributy a určí tím jeho strukturu.
Základními nástroji pro přístup k ldap serveru z textové konzole jsou nástroje z balíku ldap-utils (debian) ldapadd, ldapcompare, ldapdelete, ldapmodify, ldapsearch, ..., které umožňují přímé volání ldap serveru. Data jsou předávána ve formátu LDIF[3], který je pro člověka čitelný, ale není pohodlný a hodí se spíše pro strojové zpracování.
Nejznámějším grafickým nástrojem pro unixové operační systémy je GQ, který je již značně zastaralý a zdá se mrtvý (31.3.2010).
Dalším nástrojem je Apache Directory Studio[4], který umožňuje komfortní práci s LDAP servery.
Nejčastěji používanou implementací LDAP serveru v GNU/Linuxu je OpenLDAP[5], server podporuje SASL authentizaci.
Pro instalaci v Debianu doporučuji použít návod[6], ve kterém je detailně popsán postup zprovoznění krok za krokem. Zde uvedu jen stručný výtah:
sudo apt-get install slapd ldap-utils
Nastavit globání konfiguraci pro přístup k LDAP serveru
vi /etc/ldap/ldap.conf
Nastavit hodnoty podle informací vyplněných při instalaci:
BASE o=fi,dc=muni,dc=cz URI ldap://10.0.0.10/
Konfigurace OpenLDAP serveru (slapd) se provádí v konfiguračním souboru /etc/ldap/slapd.conf. Výchozí hodnoty by měly být postačující.
Otestovat funkčnost můžeme příkazem
ldapsearch -x
který by měl vyhledat všechny záznamy a vypsat v LDIF formátu na standardní výstup.
LDAP nyní obsahuje pouze základní informace o kořenu adresářové struktury a administrátorovi. Pro další použití je potřeba naplnit adresář objekty. V návodu[6] naleznete vzorový příklad v LDIF formátu. Další možností naplnění adresáře jsou např. konverzní scripty pro převod unixových účtů do ldapu.
Pro možnost použití LDAP serveru pro ověření uživatelů v GNU/Linuxu (UNIXu) je nutné používat objekty s objectClass PosixAccount a ShadowAccount, které strukturou obsahem odpovídají souborům /etc/passwd a /etc/shadow
Pro zapnutí ověřování uživatelů je potřeba nainstalovat podporu pro ldap v nsswitch, daemon nscd umožní cachování informací získaných přes nss a tím výrazně urychlit opakované dotazy:
sudo apt-get install libnss-ldap nscd
Upravíme konfiguraci libnss-ldap v souboru /etc/libnss-ldap.conf tak, aby odpovídala konfiguraci LDAP serveru:
base o=fi,dc=muni,dc=cz uri ldap://10.0.0.10/
Upravíme /etc/nsswitch.conf a tím povolíme dotazování se na LDAP server pro získávání informací o uživatelích.
passwd: files ldap group: files ldap
Přihlašování uživatelů zajistí PAM, nainstalujeme modul pro podporu LDAPu:
sudo apt-get install libpam-ldap
Upravíme konfiguraci pro přístup k ldap serveru v souboru /etc/pam_ldap.conf:
base o=fi,dc=muni,dc=cz uri ldap://10.0.0.10/
Nyní je potřeba pro služby v PAMu zapnout ověřování proti LDAPu:
#/etc/pam.d/common-account account sufficient pam_unix.so account required pam_ldap.so #/etc/pam.d/common-auth auth [success=1 default=ignore] pam_unix.so nullok_secure auth required pam_ldap.so use_first_pass auth required pam_permit.so #/etc/pam.d/common-session session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
Nyní by již mělo být možné použít ldap uživatele pro přihlašování k systému.
Přístupová prava k objektům i replikace je závislá na implementaci serveru. V OpenLDAP se obojí konfiguruje v /etc/ldap/slapd.conf. Pro správnou funkčnost je vyžadováno prvotní sesynchronizování databáze a stejné konfigurace serverů. Příklad konfigurace:
master: replica uri=ldap://slave.example.com binddn="cn=Manager,o=fi,dc=muni,dc=cz" bindmethod=simple credentials=secret replogfile /usr/lib/openldap/ldap.replog slave: updatedn cn=Manager,o=fi,dc=muni,dc=cz updateref ldap://master.example.com access to attrs=userPassword,userPKCS12 by dn="cn=admin,o=fi,dc=muni,dc=cz" write by anonymous auth by self write by * none
OPIE[7] je authentizační mechanismus pomocí jednorázových hesel založený na S/Key[8].