LDAP je příkladem tzv. adresářové služby (directory service). To znamená, že klientům poskytuje přístup k nějak organizovaným a strukturovaným datům podobně jako třeba telefonní seznam. Databáze může obsahovat např. seznam zaměstnanců, jejich jména, e-maily, telefony, informace o jejich UNIXovských účtech, uživatelská nastavení programů. Také třeba informace o různých přístrojích (kopírky, ...), kancelářích - jejich umístění, čísla budov,...
Optimalizováno je především vyhledávání. Předpokládá se, že modifikace údajů nebude příliš častá.
Nejprve ITU (International Telecommunication Union) vytvořila sérii e-mailových standardů vyžadující adresář jmen (a dalších informací) přístupný napříč sítěmi - X.500. Součástí je DAP (Directory Access Protocol) - protokol pro přístup k síťové adresářové službě.
DAP je ovšem dost težkopádný, operuje přes všechny vrstvy OSI, je výpočetně náročný.
V roce 1993 tak vzniká jeho odlehčená verze LDAP (Lightweight Directory Access Protocol). Původně fungovaly LDAP servery jako brány mezi uživatelem a DAP serverem. Časem se přešlo na čistě LDAPovské servery.
OpenLDAP, Apache Directory Server, CA eTrust Directory, Fedora Directory Server , Red Hat Directory Server, Novell eDirectory, Sun Directory Server Enterprise Edition IBM SecureWay Directory, IBM Tivoli Directory Server, Windows Server 2003 Active Directory, Siemens DirX, Oracle Internet Directory, tinyldap, ...
Adresář je tvořen stromem objektů (záznamů) a tvoří tak
directory information tree (DIT).
Objekt je tvořen množinou atributů.
Atribut má jméno, tedy i typ a popis, a aspoň jednu hodnotu.
Definice atributů je popsána schematem (formát ASN.1).
Na jedné úrovni stromu má každý objekt různé Relative Distinguished Name (RDN). Objekt je v celé stromové hierarchii jednoznačně určen svým Distinguished Name (DN), což je RDN objektu a RDN jeho předchůdců ve stromu. Je to tedy stejný koncept jako relativní a absolutní cesta k souboru.
Příklad:
DN: uid=kas,ou=People,dc=fi,dc=muni,dc=cz
RDN: uid=kas
configure
make depend
make
make test
- volitelně (několik minut)su -c 'make install'
- implicitně instaluje do
/usr/local
slapd.conf(5)
/usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/nis.schema # BDB database definitions database bdb suffix "dc=lab,dc=fi,dc=muni,dc=cz" directory /usr/local/var/openldap-data rootdn "cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz" rootpw secretDatabází může být více pod jedním serverem i různých druhů.
rootdn
je DN správce databáze, rootpw
jeho
heslo (může být uvedena hash, viz. slappasswd(8)
).
slapd(8)
(/usr/local/libexec/slapd
)
Pro přidání záznamů online je potřeba postup podobný tomuto:
Vytvořit textový soubor s přidávanými záznamy ve formátu LDIF.
Např. soubor example.ldif
:
dn: dc=lab,dc=fi,dc=muni,dc=cz objectclass: dcObject dc: lab dn: cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz objectClass: organizationalRole cn: Manager description: Directory ManagerDo databáze se záznamy uloží například příkazem:
ldapadd -xW -D 'cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz' -f example.ldif
ldapadd, ldapmodify, ldapdelete
- přidávání, modifikace a
mazáníldapmodrdn
- přejmenování RDNldappasswd
- mění heslo ldap objektuslapadd
- vytvoření databáze.slapindex
- znovuvytvoření indexů.slapcat
- export databáze do souboru v LDIF.
ldapsearch(1)
:ldapsearch -x -H ldap://ldap.fi.muni.cz -b 'ou=Group,dc=fi,dc=muni,dc=cz' \ '(&(objectClass=posixGroup)(memberUid=staudek))'Parametr
-x
zapíná použití jednoduché autentizace místo SASL.-b searchbase
určuje kořen prohledávaného podstromu.(mail=john*)
). Tyto výrazy lze použít jako operandy
prefixově zapsaných logických operátorů. Př.:
(&(objectClass=person)(|(givenName=John)(mail=john*)))
Konfigurační soubor slapd.conf
může obsahovat nastavení
přístupových práv k objektům a atributům. Za uživatele, jejichž práva
jsou nastavována, se považují objekty v databázi. Neexistuje tedy žádný
externí seznam uživatelů - je nutné se vydávat za objekt (přepínač
-D
u lpdasearch
).
Příklad nastavení práva zápisu všech objektů pro Managera a čtení pro ostatní:
access to * by dn="cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz" write by * read
LDAP může fungovat jako zdroj systémových tabulek. Do databáze se uloží
informace o uživatelích podobně, jako je tomu v /etc/passwd
a /etc/shadow
. Formát těchto objektů určují třídy
posixAccount
, posixGroup
a shadowAccount
ze schématu nis.schema
.
Třída posixAccount
:
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' DESC 'Abstraction of an account with POSIX attributes' SUP top AUXILIARY MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ loginShell $ gecos $ description ) )
Aby se uživatelé mohli přihlašovat přes LDAP nebo přes shadow
,
je potřeba mít v /etc/pam.d/login
řádky podobné těmto:
auth sufficient pam_ldap.so auth sufficient pam_unix.so nullok try_first_passDále je potřeba nadefinovat LDAP server v
/etc/ldap.conf
:
host 127.0.0.1 base dc=lab,dc=fi,dc=muni,dc=cz
NSSwich komunikuje s LDAP serverem pomocí knihovny nss_ldap.so
.
Tuto možnost lze v souboru /etc/nsswitch.conf
lze nastavit
například takto:
passwd: files ldap shadow: files ldap group: files ldapTaké používá
/etc/ldap.conf
.
Name service cache daemon nscd
slouží k ukládání odpovědí LDAP (a DNS) serveru do cache.
Sníží se tak provoz na síti a zatížení serveru.
Konfigurace v /etc/nscd.conf(5)
:
enable-cache passwd yes positive-time-to-live passwd 600 ...
Propagaci databáze zajišťuje daemon slurpd(8)
.
Master i slave server by na měli mít stejný slapd.conf
soubor, až
na nastavení replikace. Pokud už master má existující databázi, je potřeba
ji zkopírovat na slave - např. celý adresář s databází, nebo pomocí
slapcat
a slapadd
.
Konfigurace replikace (slapd.conf
):
Master:
replica uri=ldap://slave.example.com binddn="cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz" bindmethod=simple credentials=secret replogfile /usr/local/var/ldap.replogSlave:
updatedn cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz updateref ldap://master.example.comMaster server zapisuje informace o změnách databáze do
replogfile
.
Replikační daemon slurpd
tento log sleduje a pokud dojde ke
změně, pošle změny slave serveru pomocí LDAP. Autorizuje se jako
binddn
(tj. totéž jako updatedn
). Nedoporučuje se,
aby binddn
byl stejný jako rootdn
, ale jiný objekt
s právem zápisu ve slave db. Pokud se někdo pokouší provést změny na slave
serveru, je odkázán na updateref
server.
OpenLDAP Software 2.3 Administrator's Guide:ldapmodify(1)
and other clients distributed as part
of OpenLDAP Software do not support automatic referral chasing
(for security reasons).