LDAP
Tomáš Koníček, xkonice1@mail.muni.cz
Obsah
Co je to LDAP?
- Lightweight Directory Access Protocol
- LDAP je informační adresářová služba. Jedná se o protokol umožňující klást složité dotazy, vkládadat, modifikovat a mazat záznamy. Data jsou v LDAPu ukládána do adresářů. Pod tímto pojmem si lze představit jeden velký strom, ve kterém jsou ve formě záznamů hierarchicky uspořádána data. Každý záznam má pak definované povinné nebo nepovinné atributy.
- Typické využití LDAP serveru je naplnění stromu například seznamem zaměstnanců, jejich jmény, příslušným oddělením, telefonními čísly, loginy, přístupovými hesly... V tomto seznamu lze vyhledávat informace ve formě dotazů např. "hledám zaměstnance tohoto oddělení s tímto loginem". Nebo oproti takovému serveru můžeme autentizovat uživatele pro přístup k systému, mailovému, ftp účtu...
- LDAP je optimalizován pro časté vyhledávání a nízký počet modifikací dat.
Strom objektů
- strom objektů (Directory Information Tree - DIT) je tvořen uzly/záznamy (entries)
- každý záznam má na jedné úrovni stromu různé relativní jméno (relative distinguished name - RDN)
- každý záznam má v rámci celého stromu jedinečné jméno (distinguished name - DN), to je tvořeno RDN záznamu a posloupností RDN jeho předchůdců ve stromu
- každý záznam má definovány povinné a nepovinné atributy (attributies)
- atributy se definují pomocí objektů (object class)
- příklady:
RDN: uid=xstudent
DN: uid=xstudent,ou=fi,o=muni,c=cz
DIT:
\
\
\
(c=cz) //stat (Country)
|
(o=muni) //organizace (Organization)
/\
/ \
/ \
(ou=fi) (ou=law) //organizacní jednotka (Organization Unit)
/
/
/
(uid=xstudent) //osoba
LDIF
- LDAP Data Interchange Format
- speciální formát pro zápis záznamů
- je třeba dát pozor na bílé znaky na konci řádků, jednotlivé záznamy jsou odděleny prázdným řádkem
- příklad LDIF záznamu:
# LDIF zaznam pro xstudent
dn: uid=xstudent,ou=fi,o=muni,c=cz
objectClass: account
homeDirectory: /home/xstudent
uco: 123456
LDAP schéma
- množina definic pravidel nad adresářovým stromem
- definuje třídy objektů (object classes)
- definuje množinu povinných a nepovinných atributů
- definuje jednotlivé atributy
- schémata jsou uložena v adresáři /etc/ldap/schema (debian)
- příklad definice třídy:
objectclass ( 2.5.6.2 NAME 'country'
DESC 'RFC2256: a country'
SUP top STRUCTURAL
MUST c
MAY ( searchGuide $ description ) )
- příklad definice atributu:
attributetype ( 2.5.4.17 NAME 'postalCode'
DESC 'RFC2256: postal code'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{40} )
Nástroje pro práci s LDAP
- k prohlédávání adesářového stromu se používá ldapsearch
příklad použití:
ldapsearch -h server -D binddn -b dotaz -W -x
-h URI adresa serveru (ldap://ldap.fi.muni.cz)
-D DN uživatele pod kterým provádím prohledávání (uid=admin,dc=fi,dc=muni,dc=cz)
-b podstrom, ve kterem se bude vyhledávat (dc=fi,dc=muni,dc=cz)
-W vyzve k zadání hesla uživatele
-x použije jednoduchou autentizaci (defaultně SASL)
obdobným způsobem (viz manuálové stránky) lze používat další utility:
ldapadd - přidávání záznamů (můžete využít LDIF soubory)
ldapmodify - modifikace záznamů
ldapdelete - odtranění záznamu z adresářového stromu
GQ - GTK nástroj pro správu LDAP serveru
phpLDAPadmin - administrace LDAP serveru, podobné phpmyadmin
OpenLDAP v praxi
- jde o otevřenou a hojně používanou implementaci LDAPu
- instalace (debian):
- apt-get install slapd ldap-utils
-v ldap-utils jsou obsaženy ldapsearch, ldapadd...
- konfigurace slapd (implementace LDAPu):
# soubor /etc/ldap/slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
loglevel 255 # nastaví debugging, později doporučuji nastavit na 0, výstup do logu je hodně ukecaný :)
database bdb
suffix "dc=fi,dc=muni,dc=cz" # kořen stromu
rootdn "cn=admin,dc=fi,dc=muni,dc=cz" #záznam superuživatele
rootpw {MD5}R7zlx09Yn0hn29V+nKn4CA== # šifrované heslo superuživatele, získáte ho příkazem slappasswd -h {MD5}
- Nastavení práv uživatelů
- pro vyšší bezpečnost LDAP serveru je dobré jednotlivým uživatelům nastavit omezená oprávnění
- v praxi je snaha nastavovat co nejnižší oprávnění
- všeobecně: access to přístup_kam by pro_koho druh_oprávnění
- příklady:
# soubor /etc/ldap/slapd.conf
access to attrs="userPassword"
by dn="uid=root,ou=people,dc=kin.vslib,dc=cz" write
by anonymous auth
by self write
by * none
access to *
by dn="uid=root,ou=People,dc=kin.vslib,dc=cz" write
by anonymous read
by users read
by self write
- pro import existujících uživatelů můžete využít migrationtools, které vytvoří potřebné LDIF soubory, jenž pomocí ldapadd přidáte do databáze
- posixAccount a shadowAccount (třídy definované tak, aby podle nich bylo možné autentizovat uživatele systému unix, obdobné souborům /etc/passwd a /etc/shadow):
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 ) )
objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount'
DESC 'Additional attributes for shadow passwords'
SUP top AUXILIARY
MUST uid
MAY ( userPassword $ shadowLastChange $ shadowMin $
shadowMax $ shadowWarning $ shadowInactive $
shadowExpire $ shadowFlag $ description ) )
PAM
- PAM slouží k ověření přihlášení proti LDAPu
- nutné nainstalovat balík libpam-ldap
- konfigurace:
#soubor /etc/pam.d/common-auth:
auth sufficient pam_ldap.so
auth sufficient pam_unix.so nullok_secure use_first_pass
#soubor /etc/pam.d/common-account
account sufficient pam_ldap.so
account sufficient pam_unix.so use_first_pass
#soubor /etc/pam.d/common-password
password sufficient pam_ldap.so
password sufficient pam_unix.so use_authok nullok obscure min=6 max=16 md5
#/etc/pam.d/common-session
session required pam_ldap.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=077
NSSwitch
- nainstalovat libnss-ldap
- umožňuje prohledávání databáze s účty
- konfigurace:
#upravit v souboru /etc/nsswitch.conf řádky:
passwd: ldap files
shadow: ldap files
group: ldap files
nscd
- name service caching daemon - slouží ke kešování informací získaných z NSS
- snižuje provoz na síti a zatížení serveru
- naistalovat nscd
- konfigurace:
#upravit soubor /etc/nscd.conf
enable-cache passwd yes
positive-time-to-live passwd 600
negative-time-to-live passwd 20
suggested-size passwd 211
check-files passwd yes
Replikace
- o replikaci se stará démon slurpd
- oba servery, master i slave, by měli mít až na nastavení replikace stejné soubory slapd.conf
- na master serveru zapisuje slapd změny v databázi do replogfile, slurpd tyto změny čte a při změně pošle informaci slave serveru -> pokud na master serveru máte ještě před spuštění replikace nějakou databázi, je nutné ji ručně zkopírovat i na slave server
- konfigurace:
# soubor /etc/ldap/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.replog
slave:
updatedn cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz
updateref ldap://master.example.com
SASL
- Simple Authentiction and Security Layer - protokol pro klient-server autentizaci přes síť
- umožňuje používání různých autentizačních mechanizmů pro klienta a server
- více na SASL
Jednorázová hesla
- pokud hrozí hrozba odposlechu hesla, je možné použít tzv. "jednorázová hesla"
- OPIE, S/Key - správci jednorázových hesel
- SASL umí využívat databázi OPIE
Zdroje
Lehký úvod do LDAP
Poznámky k LDAP
Nastavení LDAP serveru
Využití LDAPu v praxi
Archiv referátů PV090