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.
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 |
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).
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).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 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: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
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.hosts: files nisplus ldap dns
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.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
LDIF obsahuje jednu dvojicu atribút: hodnota na jednom riadku. Tento výpis sme získali príkazom: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
Parametre znamenajú:$ ldapsearch -h ldap.fi.muni.cz -b 'dc=fi,dc=muni,dc=cz' -x -LLL 'uid=xkruty'
-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:
dn: uid=xkruty,ou=People,dc=fi,dc=muni,dc=cz changetype: modify add: description description: ahoj -
ldapmodify -H ldaps://ldap.organizacia.korporacia.com -W -x \ -D 'cn=user,ou=organizacia,dc=korporacia,dc=com' -f xkruty.ldif Enter LDAP Password: XXXXXXX