X.500 je série standardů vyvinutých organizací ITU ( International Telecommunication Union ):
ITU-T number | ISO/IEC number 9594-x | Title of Standard |
X.500 | ISO/IEC 9594-1 | The Directory: Overview of concepts, models and services |
X.501 | ISO/IEC 9594-2 | The Directory: Models |
X.509 | ISO/IEC 9594-8 | The Directory: Public-key and attribute certificate frameworks |
X.511 | ISO/IEC 9594-3 | The Directory: Abstract service definition |
X.518 | ISO/IEC 9594-4 | The Directory: Procedures for distributed operation |
X.519 | ISO/IEC 9594-5 | The Directory: Protocol specifications |
X.520 | ISO/IEC 9594-6 | The Directory: Selected attribute types |
X.521 | ISO/IEC 9594-7 | The Directory: Selected object classes |
X.525 | ISO/IEC 9594-9 | The Directory: Replication |
X.530 | ISO/IEC 9594-10 | The Directory: Use of systems management for administration of the Directory |
Standardy se zabývají adresářovými službami, zahrnují protokoly:
LDAP (Lightweight Directory Access Protocol) je protokol definovaný pro modifikaci a přístup k datům na adresářovém serveru. Adresářový server využívá hiearchické stromové struktury, která je vhodná zejména pro práci s adresáři, informacemi o uživatelích (např. pro vyhledávání adres konkrétních uživatelů v příslušných adresářích, accounting) nebo například může zastoupit některé sítové informační služby (NIS a podobně). Sám neimplementuje složité transakční mechanismy (na rozdíl od relačních databází) ani funkce pro kontrolu integrity.
Protokol LDAP je odvozen od protokolu DAP ( X.500 ) a je implementován hned v několika verzích:
Jednotlivé implemetnace LDAPu mají vyvořenou řadu manuálů, nemá proto cenu zabývat se všemi najednou. Zaměříme se tedy na jednu z konktretních verzí a to na OpenLDAP. OpenLDAP je jedna z nejrozšířenějších implementací, je to projekt s otevřeným zdrojovým kódem a má své instalační balíčky ve většině dostupných distribucí.
Balíček OpenLDAP obsahuje:
Po instalaci příslušného balíčku nebo instalaci ze zdrojových kódu standadní cestou "./configure, make, make test a make install" nás bude nejprve zajímat konfigurační soubor slapd.conf.
Výchozí nastavení tohoto souboru obsahuje několik atributů a nastavení, ze kterých si popíšeme jen ty základní:
#slapd.conf: #".shcema" soubory obsahují definice jednotlivých atributů a tříd #jejich formát je například nasledující: #attributetype ( 1.3.6.1.1.1.1.17 NAME 'ipProtocolNumber' # EQUALITY integerMatch # SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema #soubor pro uchování identifikačního čísla procesu pidfile /var/run/slapd/slapd.pid #soubor s postupem pro spuštení démona slapd #příklad: #/usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf argsfile /var/run/slapd/slapd.args loglevel none #dynamicky načítané moduly modulepath /usr/lib/ldap moduleload back_hdb #maximální počet záznamů, vrácených při hledání sizelimit 500 #počet procesorů použitých pro indexování tool-threads 1 #backend - poskytuje rozhraní a funkce #hdb je návrh hierarchické stromové databáze backend hdb #specifická direktiva databáze database hdb #kořenový adresář v databázi suffix "dc=com" directory "/var/lib/ldap" dbconfig set_cachesize 0 2097152 0 dbconfig set_lk_max_objects 1500 dbconfig set_lk_max_locks 1500 dbconfig set_lk_max_lockers 1500 index objectClass eq lastmod on checkpoint 512 30 #a na závěr přístupová práva #povolíme číst všem cokoli ( v řadě případů nežádoucí, vhodné pro ladění ) access to * by * read #povolíme zápis uživateli "admin" access to * by dn="cn=admin" write
Běžně používané atributy v AD:
jméno | popis |
givenName | křestní jméno |
sn | surname - příjmení |
description | popis |
adresa elektronické pošty | |
company | jméno společnosti |
department | oddělení ve firmě |
Příklad datových typů atributů:
datovy typ | popis |
int | integer |
bin | binary data |
cis | case insensitive string |
ces | case exact string |
dn | distinguished name |
tel | telephone number |
Je vhodné konstatovat, že záznam nemusí být instancí pouze jedné objektové třídy. Třídy jsou ve schématu uspořádány hierarchicky a mohou být trojice různých druhů, od kterých se pak odvíjí možnost jejich využití a kombinace v definici záznamu.
samy nemohou být vzorem pro tvorbu záznamu. Slouží pouze jako předloha pro odvození dalších tříd.
třídy odvozené. Právě ony slouží jako hlavní předloha pro tvorbu záznamu. Každý záznam musí ve své definici obsahovat odkaz alespoň na jednu ze strukturálních tříd. Může se dokonce odvolávat na více než jednu, ale v tomto případě musí být třídy v dědičném vztahu (např. osoba - zaměstnanec). Nelze vytvářet záznam na základě strukturálních tříd ze dvou větví (zaměstnanec - místnost).
třídy doplňkové. Takové třídy můžeme v libovolném počtu připojovat k definici záznamu. Rozšiřují počet přípustných atributů u daného záznamu.
Na rozdíl od informačního modelu, se jmenný model zabývá uložením záznamu ve stromové struktuře. Každý záznam musí v rámci celého stromu serveru obsahovat svůj jedinečný identifikátor DN ( Distinguished Name ) a také relativní identifikátor RDN (Relative Distinguished Name) v rámci jedné úrovně větve.
Mějme například doménový strom a v něm jedinečný záznam dn="uid=erigona dc=lab dc=fi dc=muni dc=cz", takovýto strom by měl v rámci nejnižší úrovně RDN="uid=erigona"
LDAP atribut | jméno | AD atribut | jméno |
CN | Common Name | CN | Common Name |
OU | Organization Unit | OU | Organization Unit |
O | Organization | DC | Domain Component |
C | Country | - | - |
Jedním z dalších modelů LDAPu je funkční model. Ten zajištuje základní operace pro manipulaci a přístup k datům, umožnuje tedy zjistit jejich stav, či měnit jejich obsah.
Pro přístup k databázi jsou určeny operace bind a unbind. Rovněž každý adresářový server podporuje základní operace nad daty a to jak s pomocí základních utilit pro hledání, mazání, porovnávání a modifikování záznamů, tak i za pomocí jednotlivých knihovních funkcí řady programovacích a skriptovacích jazyků (např. NET::LDAP v perlu).
oblast | operace | popis |
autentizace (Authentication) | bind | inicializuje spojení, vyjednává o metodě autentizace, autentizuje |
unbind | ukončí session | |
abandon | klient žádá o ukončení posílání výsledků na poslední dotaz | |
dotazování (Interrogation) | search | výběr dat z určitého regionu pomocí filtru |
compare | porovná hodnotu atributu se zadanou hodnotou | |
aktualizace (Update) | add | vytvoří nový objekt |
modify | upraví atributy záznamu (vytvořit, smazat, upravit) | |
modify RDN | slouží k přesunutí objektu v rámci stromu adresáře | |
delete | smazání záznamu |
Tento model má za úkol řídit přístup k databázi a to díky implementované autentizaci a autorizaci.
Umožnuje autentizovat uživatele hned několika způsoby a to:
Kde v rámci operace bind nejsou předávány žádné informace ohledně identity uživatele.
Pomocí DN a hesla. Pokud nehceme posílat heslo v otevřeném tvaru, musíme použít TLS/SLL spojení.
PKI kryptografie
OpenLDAP disponuje množstvím zásuvných modulů, které můžeme využít pro autentizaci uživatele.
Proces který nastupuje po uspěšné autentizaci. Nyní už víme o jakého uživatele se jedná, ale to neznamená, že mu povolíme vše. Daný uživatel muže nad databází provádět pouze to, co je mu dovoleno.
Příkladem je třeba povolení administrátoru zapisovat do databáze:
access to * by dn="cn=admin" write
Toto nastavení se provádí v konfiguračním souboru slapd.conf
Sada utilit pro přístup a modifikaci dat v LDAPu.
Sada utilit po instalaci slapd
Grafický nástroj používající PyQt.
GTK LDAP prohlížeč
Java LDAP průzkumník.