Adresářové služby (LDAP)

Popis a administrace produktu Sun Directory Server

Lukáš Cirkva


Obsah

Úvod
1. Adresář
1.1. Komponenty adresáře
1.2. Použití adresáře
1.3. LDAP
1.3.1. Adresáře v informačních systémech
1.4. Sun Java System Directory Server (JES DS)
1.4.1. Role
1.4.2. Přístupová práva (ACI)
1.5. Závěr
2. Instalace
2.1. Podporované operační systémy
2.2. Postup instalace
3. Použití a administrace
3.1. Práce s obsahem adresáře
3.1.1. ldapsearch
3.1.2. ldapmodify
3.2. Administrace adresářového serveru
3.2.1. Souborový strom
3.2.2. Indexy a cache
3.2.3. zálohování
3.3. Logování
3.3.1. access log
3.3.2. audit log
3.3.3. error log
3.3.4. Návratové kódy
3.4. Obvyklé problémy
4. Použité zdroje

Úvod

Cílem tohoto dokumentu je přiblížit možnosti adresářových služeb a jejich použití v informačních systémech se zaměřením na standardizovaný protokol LDAP.

Prezentovat vlastnosti a možnosti adresářových služeb budu na produktu od firmy Sun Microsystems Sun Java System Directory Server (JES DS), který znám a ve své práci používám. Každopádně níže popsané skutečnosti platí ve velké míře na většinu adresářových serverů LDAP typu, z Open Source projektů je třeba zmínit SW Openldap.

Kapitola 1. Adresář

Adresářem je například klasický telefonní seznam, organizovaný seznam kontaktů a vizitek nebo seznam uživatelských kont v počítačových systémech. Slouží nám k organizaci a sdružování dat do skupin, aby se v nich uživatel lépe orientoval. Adresáře jsou v podstatě jakési zasobníky (kontejnery) pro ukládání dat, specializované databáze ve kterých lze uchovat a především vyhledat velké množství informací různého charakteru. Jedná se vlastně o hiearchický seznam objektů a atributů těchto objektů, porovnatelný se strukturou adresářů a podadresářů souborového systému.

1.1. Komponenty adresáře

Velmi často se spojují termíny adresář a adresářová služba a jsou považovány za synonymum. Naopak adresářové služby v informačních technologiích se skládají z více částí:

  1. Informace uložené v adresáři.

    • identity (uživatelská jména, hesla, fotografie apod.)

    • systémové informace (schémata pro mailové služby, kalendářové služby apod.)

  2. Serverový software, který tyto informace poskytuje.

  3. Klientský software, který je schopen uživateli tyto informace zprostředkovat.

  4. Hardware pro klientský a serverový SW.

  5. Podpůrný software jako jsou operační systémy a ovladače zařízení.

  6. Síťová infrastruktura, která je schopna spojit klienty se servery.

  7. Bezpečnostní politika, která specifikuje oprávnění přístupu k záznamům, aktualizaci dat, apod.

  8. Procedury, které adresářové služby používají pro údržbu a monitorování.

  9. Software používaný pro údržbu a monitorování adresářových služeb.

Tento dokument je zaměřen na popis použití klientského a serverového SW.

1.2. Použití adresáře

Proč využít adresář s LDAP přístupovým protokolem místo seznamu v souboru nebo relačních databází?

  1. Data uložená v adresáři lze organizovat a spravovat z jediného místa.

  2. V hiearchické struktuře lze poměrně snadno rozdělovat administrativní pravomoci.

  3. Konfigurace adresáře není závislá na klientském SW.

    Objekty a atributy lze snadno editovat. Přidáním dalších atributů k objektu není nutné měnit klienta, jen stačí například přidat další podmínku k využití přidaného atributu. V relačních databázích je poměrně obtížné změnit strukturu již navržené a realizované databáze.

  4. Lze zapnout kontrolu schémat poskytující určitou ochranu proti překlepům a syntaktickým chybám.

  5. Adresář je optimalizovaný na velké množství čtecích operací.

  6. Adresářové služby jsou standardizovány včetně přenosového protokolu a základních schémat, návrháři aplikací mají tedy jistotu, že budu tato schémata dodržována a nebudou pro každou aplikaci individuální jako je tomu v případě SQL tabulek.

Adresářové služby nejsou určeny k zachycení transakčních dat a neovládají práci s referenční integritou. K tomu se velmi dobře hodí klasické relační databáze využívající SQL jazyka. Nepřipadají v úvahu jakékoliv rozsáhlé transakce spojené například s vkládáním více záznamů do databáze, u kterých je nutné provádět kontrolu správných hodnot dat. Není ovšem velký problém vytvořit jakousi datovou pumpu, která by přečerpávala data mezi SQL databází a adresářovými službami.

1.3. LDAP

Lightweight Directory Access Protocol je standardizovaný protokol pro přístup k adresářovým službám, definuje komunikaci mezi serverem a klientem. Zprávy obsahují také příslušná data a informace o jejich formátu. Protokol běží nad internetovými transportními protokoly jako je TCP/IP. LDAP je jednodušší alternativou k protokolu X.500 Directory Access Protocol (DAP), přičemž slouží i jako brána pro přístup k tomuto protokolu.

LDAP je protokol orientovaný na zprávy (message-oriented protocol). Klient vytvoří zprávu obsahující nějakou žádost a odešle ji serveru. Ten ji zpracuje a odešle výsledek zpět jako sérii jedné nebo více LDAP zpráv.

Obrázek 1.1. LDAP komunikace

LDAP komunikace

Příklad 1.1. LDAP komunikace - access log

Příklad access logu, uspěšné operace vyhledání atributu.

[22/May/2005:15:41:40] conn=1 op=-1 msgId=-1 - fd=35 slot=35 LDAP connection from 127.0.0.1 to 127.0.0.1
[22/May/2005:15:41:40] conn=1 op=0 msgId=1 - BIND dn="cn=Directory manager" method=128 version=3
[22/May/2005:15:41:40] conn=1 op=0 msgId=1 - RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=directory manager"
[22/May/2005:15:41:40] conn=1 op=1 msgId=2 - SRCH base="dc=example,dc=cz" scope=2 filter="(uid=kuky)" attrs=ALL
[22/May/2005:15:41:40] conn=1 op=1 msgId=2 - RESULT err=0 tag=101 nentries=1 etime=0
[22/May/2005:15:41:40] conn=1 op=2 msgId=3 - UNBIND
[22/May/2005:15:41:40] conn=1 op=2 msgId=-1 - closing - U1
[22/May/2005:15:41:41] conn=1 op=-1 msgId=-1 - closed.

LDAP ve zkratce:

  • Soubor čtyř modelů - informační, jmenný, funkční a bezpečnostní model.

    1. objekty a atributy - Directory Information Three (DIT)

    2. hierarchie objektů

      • root suffix - kořen adresáře

        dn: dc=example,dc=cz
      • subsuffix

        dn: o=organizace,dc=example,dc=cz
      • branchpoint - list adresáře

        dn: uid=cirkva,ou=People,o=organizace,dc=example,dc=cz
    3. identifikace objektů pomocí jednoznačného identifikátoru - Distinguished Name (dn)

    4. 3 druhy schémat (atributy, třídy a namebinding)

      • atribut - single/multiple (jeden nebo více výskytů u objektu)

      • třída - may/must (možný nebo povinný výskyt u objektu)

      • namebinding - definice unikátního rozlišení (moc se nevyužívá)

        Příklad 1.2. schéma - 00core.ldif

        dn: cn=schema
        objectclass: top
        objectclass: ldapSubentry
        objectclass: subschema
        cn: schema
        #
        # aci
        #
        aci: (target="ldap:///cn=schema")(targetattr !="aci")(version 3.0;acl "anonymous, no acis"; 
        allow (read, search, compare) userdn = "ldap:///anyone";)
        #
        # attribute types:
        #
        attributeTypes: ( 2.5.4.1 NAME 'aliasedObjectName' DESC 'Standard LDAP attribute type' 
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE X-ORIGIN 'RFC 2256' )
        ...
        #
        # object classes:
        #
        objectClasses: ( 2.5.6.2 NAME 'country' DESC 'Standard LDAP objectclass' 
        SUP top MUST ( c ) MAY ( searchGuide $ description ) X-ORIGIN 'RFC 2256' )
        ...
        
  • LDAP Data Interchange Format (LDIF) – standardizovaný textový formát pro výměnu adresářových dat.

    Objekty v adresáři jsou vzájemně odděleny prázdným řádkem a skládají se z několika částí:

    1. jednoznačné identifikace - distingusihed name - dn

    2. seznamu tříd

    3. seznamu atributů

    Příklad 1.3. LDIF se systémovými i uživatelskými informacemi

    dn: uid=cirkva,ou=People,o=organizace,dc=example,dc=cz
    uid: cirkva
    iplanet-am-modifiable-by: cn=Top-level Admin Role,dc=example,dc=cz
    icsCalendar: cirkva@example.cz
    mail: cirkva@example.cz
    mailUserStatus: active
    gn: Lukáš
    sn: Cirkva 
    mailHost: mail.example.cz
    inetUserStatus: Active
    userPassword: 
    objectClass: userpresenceprofile
    objectClass: iplanet-am-managed-person
    objectClass: top
    objectClass: icscalendaruser
    objectClass: iplanet-am-user-service
    objectClass: inetadmin
    objectClass: organizationalperson
    objectClass: person
    objectClass: sunssoadapterperson
    mailDeliveryOption: mailbox
    icsExtendedUserPrefs: ceNotifyEmail=cirkva@example.cz
    icsExtendedUserPrefs: ceDefaultView=weekview
    icsExtendedUserPrefs: sunCalEventfilter=accepted,tentative,declined,needs-action
    icsFirstDay: 1
    preferredLanguage: cs
    sunSSOAdapterConfigurations: default|http:/?configName=sunOneCalendar&configDe
     sc=SUN-ONE-CALENDAR&domain=example.cz
    nsRoleDN: cn=Role,o=organizace,dc=example,dc=cz
    ...
    
  • LDAP serverový software – soubor software pro provoz LDAP serveru.

    Příkazy k použití:

    • search

    • compare

    • add, delete

    • modify

    • dn, bind, unbind, abadon ...

    Příklady SW:

    • Openldap

    • Sun JES DS

    • Microsoft Active Directory

  • LDAP klientský software – soubor programů schopných práce s LDAP serverem.

    Příklady GUI:

    • gq

    • ldapbrowser

    • Luma

    • Sun java console

    • JXplorer

  • LDAP API – aplikační programové rozhraní pro vývoj software

1.3.1. Adresáře v informačních systémech

S adresáři v informačních systémech setkáváme a budeme setkávat stále více. Všude se mluví o tom, jak identity hierarchické seznamy je třeba integrovat do jediného adresářového serveru. LDAP adresáře jsou v mnoha případech tím pravým řešením.

Příklad využití LDAP adresáře:

  • Přihlašování do operačního systému - UNIX, Linux, Windows...

  • Náhrada jmenných služeb typu NIS

  • Integrace identit služeb elektronické pošty - SMTP, IMAP/POP

  • Informace pro přístup do MIS a ERP.

  • Informace pro servery síťových služeb - DHCP, DNS, HTTP serverů.

1.4. Sun Java System Directory Server (JES DS)

JES DS je adresářový server napsaný v ANSI C, Perlu a Jave. Jedná se tedy o hiearchickou distribuovanou a rozšiřitelnou databázi objektů vycházející z X.500 ISO normy. JES DS obsahuje několik rozšíření-specialit, které jsou natolik zajímavé, že se jim budu hlouběji věnovat.

1.4.1. Role

Jde o skupiny uživatelů, ale opačné odkazované. U klasické skupiny je seznam registrovaných uživatelů. Pokud je třeba zjistit k jaké skupině uživatel náleží, dochází obvykle k výpočetně náročnějšímu prohledávání. Naopak v případě rolí existuje u každého objektu uživatele atribut nsRoleDN s ukazatelem na existující roli, tudíž není třeba prohledávat všechny skupiny, co někdy znamená i značné zrychlení operací.

1.4.1.1. Managed role

Managed role je jednoduchý typ role. (Příkazy ldapsearch a ldapmodify jsou osvětleny v dalších kapitolách.)

Příklad 1.4. Vložení uživatele do role "Engineer"

ldapmodify -h host -p port -D "cn=Directory Manager" -w heslo
dn: uid=cirkva,ou=People,dc=example,dc=cz
changetype: modify
add: nsRoleDN
nsRoleDN: cn=Engineer,ou=People,dc=example,dc=cz

1.4.1.2. Filtered role

Jsou podobné dynamickým skupinám: definuje se filtr, který určuje členy této role. Tento filtr je uložen atributu nsRoleFilter. Pokud je objekt (například uživatel) v dynamické roli, je vygenerován dynamický atribut (obsah atributu nelze měnit) nsRole (narozdíl od statického nsRoleDN), který obsahuje Distinguished Name (dn) role.

Příklad 1.5. Vytvoření Filtered role

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w heslo
dn: cn=Engineer,ou=People,dc=example,dc=cz
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerFilter
nsRoleFilter: (isEngineer=True)
Description: filtered role for sales managers

Příklad 1.6. Uživatel je ve Filtered roli

ldapsearch -h host -p port -D "cn=Directory Manager" -w heslo \
-b "ou=People,dc=example,dc=cz" -s sub "(cn=*Cirkva)"
dn: uid=cirkva,ou=sales,ou=People,dc=iexample,dc=cz
cn: Lukáš Cirkva
isEngineer: TRUE
...
nsRole: cn=Engineer,ou=People,dc=example,dc=cz

1.4.1.3. Nested role

Nested role umožňují vytvářet role, které obsahují další role. Nested role obsahuje seznam (dn) - odkazů na dalších roli. Pokud je uživatel členem nested role, pak je také automaticky členem všech rolí uvedených v nested roli.

Příklad 1.7. Nested role - role mezi částmi organizace (organization unit - ou)

ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsNestedRoleDefinition
cn: MarketingSales
nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com

1.4.2. Přístupová práva (ACI)

Access Control Instructions (ACI) jsou přístupová práva napsaná speciálním jazykem. Pomocí tohoto nástroje lze poměrně jemně nastavit kdo (userdn, ip, authmethod,...) a kdy může přistupovat (read,write,search,compare...) na jaké objekty v adresáři.

Příklad 1.8. ACL - přístup anonymního uživatele z domény example.com (kromě uživatelských hesel)

aci: (targetattr !="userPassword")(version 3.0; acl "Anonymous \
 example"; allow (read, search, compare) \
 userdn= "ldap:///anyone" and dns="*.example.com";)

1.5. Závěr

Doufám, že čtenář při čtení toho článku získal alespoň částečný rozhled o možnostech adresářových služeb, a že v něm vzbudil zájem o další informace o této problematice. Tento text ovšem není možno brát jako kompletní manuál, k tomu byly o problematice adresářových služeb napsány obsáhlé publikace.

V dalších části tohoto seriálu bude popsána instalace, administrace i s názornými přiklady.

Kapitola 2. Instalace

Instalace adresáře od SUNů (JES DS) je poměrně jednoduchá. Nebudu rozvádět licenční politiku, podstatné je možnost otestování zdarma.

2.1. Podporované operační systémy

Využívám balík SW s názvem Sun Java Enterprise System verze 2004Q3 a 2005Q1, který lze na testovná zdarma získat na www.sun.com/download pro tyto operační systémy:

  1. Solaris verze 8, 9, 10 architektury SPARC

  2. Solaris 9, 10 pro x86

  3. RedHat Enterprise 2.1 (RH Enterprise 3.0 pro 2004Q5)

2.2. Postup instalace

Pro tuto prezentaci jsem použil JES 2005Q1 na CentOS, který odpovídá RedHat Enterprise 3.0. V Linuxu i Solarisu stačí balík rozbalit a spustit:

./installer -nodisplay -noconsole -saveState /tmp/jes.state

Pro adresářový LDAP server se nastavuje několik věci, například uživatelé pro administraci, přístupový port, uživatel v systému a suffix.

Příklad 2.1. Parametry při instalaci

Enter Server Admin ID [admin] 
Enter Admin User's Password (At least 8 characters long) []
Enter Directory Manager DN [cn=Directory Manager]
Enter Directory Manager's Password 
Enter Server Identifier [portal]
Enter Server Port [389] 
Enter Suffix [dc=example,dc=cz] 
Enter Administration Domain [example.cz]
Enter System User [ldap]
Enter System Group [other]

Kapitola 3. Použití a administrace

Na internetu se mi nepodařilo najít souhrnný soupis použití LDAP příkazů, proto se na osvětlení použití s příklady zaměřím.

3.1. Práce s obsahem adresáře

Grafické utilitky si každý může odzkoušet sám, mnohem zajímavější jsou samotné příkazy LDAPu, na které se v této kapitole zaměřím.

3.1.1. ldapsearch

Příkaz slouží

Příklad 3.1. Základní struktura ldapsearch

ldapsearch -D “login“ -w “passwd“ -b “base“ -s “base|one|sub“ co_hledat co_vypsat

Základní vstupní parametry:

  1. login name

    Pod jakým uživatelem se ldapsearch provede, s tím souvisí i výsledek vyhledávání. Nejvyšší pravomoci v adresáři má uživatel "Directory Manager".

  2. base object - výchozí bod hledání.Určuje uzel stromu pomocí jeho Distingushed Name (DN), od kterého se má začít s prohledáváním záznamů

  3. search scope - oblast prohledávání.

    Tento parametr určuje hloubku prohledávání.

    Obrázek 3.1. LDAP - search scope

    LDAP - search scope
  4. search filter - vyhledávací filtry

    Slouží pro vyjádření hledaných výrazů v adresářovém stromu.

3.1.1.1. Příklady

Příklad 3.2. ldapsearch - výpis konfigurace adresáře

ldapsearch -p 390 -D "cn=Directory manager" -w "passw" -b "" -s base "objectclass=*"
version: 1
dn:
objectClass: top
namingContexts: dc=example,dc=cz
namingContexts: o=comms-config
namingContexts: o=NetscapeRoot
namingContexts: o=pab
namingContexts: o=PiServerDb
supportedExtension: 2.16.840.1.113730.3.5.7
supportedExtension: 2.16.840.1.113730.3.5.8
...
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: DIGEST-MD5
supportedLDAPVersion: 2
supportedLDAPVersion: 3
vendorName: Sun Microsystems, Inc.
vendorVersion: Sun Java(TM) System Directory Server/5.2_Patch_3
dataversion: 02005050310131602005050310131602005050310131602005050310131602005
 0503101316
netscapemdsuffix: cn=ldap://dc=book,dc=example,dc=cz:390

Příklad 3.3. ldapsearch - výpis všech atributů objektu uživatele (kromě dynamických atributů)

ldapsearch -p 390 -D "cn=Directory manager" -w "passw" -b "dc=example,dc=cz" uid=cirkva
uid=cirkva,ou=People,o=sun,dc=example,dc=cz
sn=Cirkva
cn=Lukáš Cirkva
iplanet-am-modifiable-by=cn=Top-level Admin Role,dc=example,dc=cz
givenName=Lukáš
inetUserStatus=Active
uid=cirkva
objectClass=sunportalnetmailperson
objectClass=top
objectClass=iplanet-am-managed-person
objectClass=person
...

Příklad 3.4. ldapsearch - výpis konkrétního atributu u uživatele

Atribut sunPortalDesktopDPDocument obsahuje informace o nastavení pracovní plochy portálu v BASE kódování.

ldapsearch $AUTH -b "dc=example,dc=cz" uid=cirkva sunPortalDesktopDPDocument
version: 1
dn: uid=kuky,ou=People,o=sun,dc=example,dc=cz
sunPortalDesktopDPDocument:: PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgi
 IHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBEaXNwbGF5UHJvZmlsZSBTWVNURU0gImphcjov
...

Atribut sunPortalDesktopDPDocument v textové formě:

ldapsearch $AUTH -b "dc=example,dc=cz" -B uid=cirkva sunPortalDesktopDPDocument
uid=kuky,ou=People,o=sun,dc=example,dc=cz
sunPortalDesktopDPDocument=<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE DisplayProfile SYSTEM "jar://resources/psdp.dtd">

<DisplayProfile version="1.0" priority="10">
    <Properties>
        <Collection name="GlobalThemes" propagate="false">
            <Collection name="SunTheme">
                <String name="description" value="Sun"/>
                <String name="bgColor" value="white"/>
                <String name="titleBarColor" value="#999999"
...

Příklad 3.5. ldapsearch - výpis skupiny uživatelů

Pro výpis lze zadávat různé filtry vyhledávání objektů a atributů:

  • vyhledá uid začínající na "c" a

    ldapsearch $AUTH -b "dc=example,dc=cz" uid=c*
  • vyhledá uid obsahuj na "kv" a

    ldapsearch $AUTH -b "dc=example,dc=cz" uid=*kva*
  • vyhledá objekty obsahující sn=Cirkva a zároveň i givenName=Lukáš

    ldapsearch $AUTH -b "dc=example,dc=cz" (&(sn=Cirkva)(givenName=Lukáš)

    Podobně se vyjádří logický OR - "(|( )( ))" a NOT - "(!( )( ))"

Příklad 3.6. ldapsearch - výpis všech objektů (jejich dn) v adresáři

ldapsearch $AUTH -b "dc=example,dc=cz" "(|(objectclass=*)(objectclass=ldapsubentry))" dn

Příklad 3.7. ldapsearch - operační atributy

Adresářový server od Sunů obsahuje operační skryté atributy a atributy generované za chodu. Pokud chceme tyto atributy vypsat, je nutné je explicitně vyjmenovat.

ldapsearch $AUTH -b "dc=example,dc=cz" uid=cirkva modifytimestamp
dn: uid=cirkva,ou=People,o=sun,dc=example,dc=cz
modifytimestamp: 20050429090115Z

3.1.2. ldapmodify

Možnosti využití:

  1. Přidání atributu k objektu:

    changetype: add

  2. Modifikace atributu:

    changetype: modify

    [add] |[replace] |[delete]: atribut

  3. Mazání atributu:

    changetype: delete

Příklad 3.8. ldapmodify - přidání objektu uživatele

ldapmodify -p 390 -D "cn=Directory manager" -w passwd

a interaktivně se zadají minimálně povinné atributy:

dn: uid=user,ou=people,o=organizace,dc=example,dc=cz
changetype: add
objectclass: inetorgperson
uid: user
sn: test
cn: test user   

pokud je vše zadáno správně, odešleme údaje Ctrl+D a následuje:

adding new entry uid=user,ou=people,o=sun,dc=example,dc=cz

Příklad 3.9. ldapmodify - přidání atributu k uživateli

ldapmodify -p 390 -D "cn=Directory manager" -w passwd
dn: uid=cirkva, ou=People, o=organizace, dc=example, dc=cz
changetype: modify
add: telephonenumber
telephonenumber: +420 000

Příklad 3.10. ldapmodify - přidání LDIF ze soubory

V souboru ldapheslo.txt je zapsáno heslo Directory Manager uživatele a v user_import.txt je LDIF, který se importuje do adresářového serveru.

ldapmodify -D 'cn=Directory Manager' -j ldapheslo.txt -a -v -f /root/user_import.txt

3.2. Administrace adresářového serveru

3.2.1. Souborový strom

Seznam souborů je dle mého skromného názoru plně vypovídající.

Základní struktura adresářového serveru, slapd instancí může být několik:

serverroot/
    slapd-instance/
    shared/
         bin/
         config/
    ./startconsole
    ./start-admin
    ./stop-admin
  • start | stop-admin utilitky slouží k ovládání administračního serveru

  • startconsole - tlustá javovská administrační konzole

    Příklad 3.11. Sun JES DS - aktivní procesy

    Adresářový server

    Administrační server

    Příklad 3.12. Sun JES DS - "tlustá" administrační konzole

    starconsole

serverroot/shared/

config/certmap.conf/config/ldap.conf
config/dbswitch.conf
config/ssusers.conf
config/ds.conf

bin/ldapmodify
bin/ldapsearch
bin/ldapdelete
bin/ldapcompare

slapd-instance/

bak/
config/
    schema/
    ./lse.ldif
db/
ldif/
logs/
   access
   audit
   error
  • bak/ - zálohy db

  • db/ - data LDAP (formát BerkeleyDB

  • config/dse.ldif - konfigurace instance (slapd-instance)

  • config/schema - schémata atributů a tříd

  • ldif/ - zálohy ve formátu ldif

3.2.2. Indexy a cache

3.2.3. zálohování

Zálohovat lze komplet adresář nebo jen části stromu a to jak db formát tak i z/do LDIFu.

Příklad 3.13. záloha - z DB do LDIF suffixu dc=example,dc=cz

db2ldif -s dc=example,dc=cz
16/May/2005:11:34:25 +0200] - DEBUG  - conn=-1 op=-1 msgId=-1 -  Backend Instance: userRoot
ldiffile: /var/opt/sun/directory-server/slapd-book/ldif/2005_05_16_113423.ldif
[16/May/2005:11:34:26 +0200] - export userRoot: Processed 1000 entries (29%).
[16/May/2005:11:34:28 +0200] - export userRoot: Processed 2000 entries (58%).
[16/May/2005:11:34:29 +0200] - export userRoot: Processed 3000 entries (87%).
[16/May/2005:11:34:29 +0200] - export userRoot: Processed 3434 entries (100%).

Příklad 3.14. restore - z LDIF do DB

ldif2db -s dc=example,dc=cz -i /var/opt/sun/directory-server/slapd-sun/ldif/2005_05_16_113423.ldif

3.3. Logování

Logování adresářových služeb je velmi důležitou funkcí, která usnadní nejen ladění aplikací. Dle mého názoru je logování adresářových služeb velmi povedené.

Loguje se v případě Sunovského adresářového serveru do třech souborů, které jsou dle určité politiky rotovány nebo i v případě potřeby automaticky odmazávány.

3.3.1. access log

Obsahuje informace o přístupu do adresářového serveru od operace BIND po SEARCH a MODIFY až k UNBIND. U každého příkazu jsou napsány identifikační kód (počet výsledků - u operace SEARCH) a návratové hodnoty.

Příklad 3.15. access log - demostrace logování - ldapsearch

Z příkladu je zřejmé logování připojení, BIND pod uživatelem (a výsledek), vyhledání s výsledkem jedidého výskytu a ukončení spojení.

ldapsearch -p 390 -D "cn=Directory manager" -w "passw" -b "dc=example,dc=cz" uid=cirkva
[22/May/2005:15:41:40] conn=1 op=-1 msgId=-1 - fd=35 slot=35 LDAP connection from 127.0.0.1 to 127.0.0.1
[22/May/2005:15:41:40] conn=1 op=0 msgId=1 - BIND dn="cn=Directory manager" method=128 version=3
[22/May/2005:15:41:40] conn=1 op=0 msgId=1 - RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=directory manager"
[22/May/2005:15:41:40] conn=1 op=1 msgId=2 - SRCH base="dc=example,dc=cz" scope=2 filter="(uid=kuky)" attrs=ALL
[22/May/2005:15:41:40] conn=1 op=1 msgId=2 - RESULT err=0 tag=101 nentries=1 etime=0
[22/May/2005:15:41:40] conn=1 op=2 msgId=3 - UNBIND
[22/May/2005:15:41:40] conn=1 op=2 msgId=-1 - closing - U1
[22/May/2005:15:41:41] conn=1 op=-1 msgId=-1 - closed.

Příklad 3.16. access log - ldapmodify

Příklad přidání objektu, který již existuje. Návatový kód je 32 - No such object exists. viz. 3.3.4 – „Návratové kódy“

[26/May/2005:16:23:51] conn=0 op=-1 msgId=-1 - fd=35 slot=35 LDAP connection from 127.0.0.1 to 127.0.0.1
[26/May/2005:16:23:51] conn=0 op=0 msgId=1 - BIND dn="cn=Directory manager" method=128 version=3
[26/May/2005:16:23:51] conn=0 op=0 msgId=1 - RESULT err=0 tag=97 nentries=0 etime=0 dn="cn=directory manager"
[26/May/2005:16:25:06] conn=0 op=1 msgId=2 - ADD dn="uid=user,ou=people,o=organizace,dc=example,dc=cz"
[26/May/2005:16:25:00] conn=0 op=1 msgId=2 - RESULT err=32 tag=105 nentries=0 etime=0
[26/May/2005:16:25:06] conn=0 op=2 msgId=3 - UNBIND
[26/May/2005:16:25:06] conn=0 op=2 msgId=-1 - closing - U1
[26/May/2005:16:25:07] conn=0 op=-1 msgId=-1 - closed.

3.3.2. audit log

Poskytuje dokonalé informace o všech změnách obsahu adresáře. Audit log je v LDIF formátu a lze ho tudíš využít pro import.

Stučně řečeno, jakákoliv změna provedená v adresáři je v i audit logu (pokud je logování zapnuté). Po obnovení adresáře ze zálohy a lze aplikovat audit log nebo jen jeho určitou část viz příklad 3.10 – „ldapmodify - přidání LDIF ze soubory“.

Pozor na rychlý nárůst těchto logů, doporučuji hlídat prostor na pevném disku nebo audit log používat jen při ladění aplikace.

Příklad 3.17. audit log - příklad dvou záznamů operačních změn

 
time: 20050526162324
dn: cn=uniqueid generator,cn=config
changetype: modify
replace: nsState
nsState:: ABbit9EdsgGzY7XKrvZxCwAAAAA=
-
replace: modifiersname
modifiersname: cn=server,cn=plugins,cn=config
-
replace: modifytimestamp
modifytimestamp: 20050526142324Z
-

time: 20050530143631
dn: cn=uniqueid generator,cn=config
changetype: modify
replace: nsState
nsState:: gPEWc9IdsgGzY7XKrvbGPwAAAAA=
-
replace: modifiersname
modifiersname: cn=server,cn=plugins,cn=config
-
replace: modifytimestamp
modifytimestamp: 20050530123631Z
-

3.3.3. error log

Obsahuje detailní informace o kritických událostech v adresáři. Například o zapnutí a ukončení adresářového serveru, ale také o nedovoleném přístupu na objekt apod.

Příklad 3.18. error log

[30/May/2005:14:36:31] - Sun Java(TM) System Directory Server/5.2_Patch_3 B2004.331.1254 (32-bit) starting up
[30/May/2005:14:36:37] - Listening on all interfaces port 390 for LDAP requests
[30/May/2005:14:36:37] - slapd started.
[30/May/2005:14:36:40] - Entry "uid=user,ou=People,dc=example,dc=cz" - attribute "add" not allowed
[30/May/2005:23:30:42] - slapd shutting down - waiting for 0 threads to terminate
[30/May/2005:23:30:42] - Waiting for 5 database threads to stop
[30/May/2005:23:30:43] - All database threads now stopped

3.3.4. Návratové kódy

Tabulka ukazuje příklady návratových kódů při práci s adresářovým serverem.

Příklad 3.19. LDAP - příklady návratových kódů

LDAP stavový kódPopis
0Success.
2Protocol error.
3Time limit exceeded.
16No such attribute exists.
17An udefined attribute type.
32No such object exists.
34An invalid DN syntax.
49Invalid credentials.
50Insufficient access rights.
51Bussy.
65Object class violation.
68Attribute already exists.

3.4. Obvyklé problémy

Při práci s adresářovým serverem dochází ve většině případů jen k několika problémům:

  • Nedojde-li k autentizaci a autorizaci uživatele například z důvodu špatného uživatelského hesla, potom jsou příkazy provedeny pod anonymním (pokud je povolen) uživatelem, který logicky nemusí mít dostatečná práva.

  • Nemožnost vložení již existujícího záznamu. Pokud záznam již existuje je nutná modifikace.

  • Objekt nelze vytvořit pokud nejsou splněné schématické požadavky - povinné atributy a třídy.

  • Nedostatečná přístupová práva - ACL.

  • UTF8 znaky nebo mezery v DN, které jsou nesprávně interpretovány nedokonalými skripty.

  • Příliš široký rozsah vyhledávání, počet výsledků je omezen.

Kapitola 4. Použité zdroje

Odkazy na použitou literaturu:

Odkazy na použitý SW:

Speciální poděkování za spolupráci při psaní dokumentu a korektuře patří Karlu Benákovi.

TOPlist