LDAP (Lightweight Directory Access Protocol)

Michal Heppler, xheppler@fi.muni.cz

Obsah

Co je LDAP?

LDAP je trochu blbější databáze optimalizovaná pro RO operace. Je velice rychlá při čtení a vyhledávání, a to jsou operace prováděné mnohem častěji než zápis.

Slouží pro ukládání v podstatě čehokoliv, co se nám hodí ukládat na síť a co potřebujeme častěji číst než zapisovat. Od databáze uživatelů až po televizní program...

Rozlišuje služby autorizované a neautorizované, globální a lokální, jak můžou být aktualizované záznamy a kým, co položky mohou obsahovat a mnoho dalších věcí.

A jak to pracuje?

LDAP je založen na struktuře klient server a data jsou uvnitř uložena do stromu s adresářovou strukturou. Když se klient na něco zeptá, tak server odpoví, nebo řekne, kdo toho ví více. Například jiný ldap server. Výhodou je, že podadresář struktury dat může být uložen i na jiném serveru.

Struktura dat

Data jsou distribuována pomocí souborů LDIF:
dn: uid=Pepa,ou=Students,ou=People,dc=mistni,dc=sit
uid: Pepa
cn: Pepa Pepik
objectClass: Skola
login: pepa
mail: pepa@mistni.sit
home: /home/pepa
type: Student
dn: uid=Webserver,ou=Machines,dc=mistni,dc=sit
uid: Webserver
cn: Pepuv webovy server
objectClass: Stroj
public: yes
admin: pepa
access: pepa, jinypepa

Software: SLAPD

SLAPD je implementace systému OpenLDAP pod GNU/GPL a také není omezen jen na použití v USA.

Co pro to potřebujeme

Kompilace

Jeho kompilace není náročná, provede se skoro klasickou triádou. ./configure, make depend, make, make install. Při kompilaci je dobré podívat se na podporované vlastnosti a vybrat si. Např chceme-li podporu pro Kerberos (--enable-kpasswd) či jak se hesla budou ukládat (--enable-cleartext nebo --enable-crypt).

Parametrů při kompilaci je opravdu dost, doporučuji prostudovat. Každopádně, kompilace není nutná při použití velkých linuxových distribucí. V tom případě jsou připravené binární balíčky.

Zdrojové kódy se dají stáhnout např. z http://www.openldap.org (aktuální stabilní verze je 2.1.22 a vývojová 2.2beta2).

Konfigurace

Konfigurace není až tak triviální a přehledná. Základní konfigurační soubory se nachází v adresáři /etc/ldap/. Hlavní konfigurační soubor je slapd.conf. Ten by měl vypadat přibližně takto:
#globální nastavení
allow bind_v2
include         /etc/ldap/schema/core.schema
schemacheck     on
pidfile         /var/run/slapd/slapd.pid
argsfile        /var/run/slapd.args
loglevel        0
access to attribute=userPassword
        by dn="cn=admin,dc=doma" write
        by anonymous auth
        by self write
        by * none
access to dn.base="" by * read
access to *
        by dn="cn=admin,dc=doma" write
        by * read
modulepath      /usr/lib/ldap
moduleload      back_bdb
#nastavení pro backend. V našem případě je to databáze
backend         bdb
database        bdb
suffix          "dc=doma"
directory       "/var/lib/ldap"
index           objectClass eq
lastmod         on

Globální parametry

access to co [ by kdo urovenpristupu control ]+ -- zaručí přístup k co uživateli kdo a povolí mu urovenpristupu. např.:

access to * by * read
-- kdokoliv muze cist cokoliv

defaultaccess { none | compare | search | read | write } -- standartní práva, pokud není určeno jinak

include filename -- vloží soubor s konfigurací. Buďto to může být konfigurační soubor, nebo soubor s definicí tzv. schéma

loglevel číslo -- Popis jednotlivých úrovní je v odkazech...

objectclass 'RFC2252 Object Class Description' -- Tato direktiva definuje nejspíš jméno schéma

sizelimit číslo -- omezuje maximální počet položek, které vrací vyhledávání

Uvedené parametry jsou jen ty nejdůležitější, další jsou uvedeny zde i s pěknými příklady

Nastavení backend

Nejdůležitější parametr je asi backend typ, kde typ je jeden z bdb, dnssrv, ldbm, ldap, meta, monitor, passwd, perl, shell, sql nebo tcp Blížší popis je v uvedenem HOWTO

Další parametry se odvíjí od typu. Vzhledem k množství typů je zde nebudu podrobněji rozebírat

Testování funkčnosti

A nejen testování nejen funkčnosti.

Editování záznamů

Když chceme přidat záznam do ldapu, máme více možností. Například pomocí souboru ldif. Tento způsob je hlavně pro hromadné přidávání záznamů. Jeho formát je uveden výše.

        ldapadd -x -D "cn=admin,dc=moje,dc=sit" -W -f zaznamy.ldif
        
odebrání záznamů je velmi podobné jako přidávání:
        ldapdelete -v -c -x -W -D "cn=admin,dc=moje,dc=sit" -f copryc.ldif
        
Neuvedeme-li parametr -f, potom se jako vstup bere ten standartní.

Chcete-li záznamy vyhledávat, máme k dispozici program ldapsearch. Jak například vysypat obsah celé databáze:

        ldapsearch -x -b 'dc=moje,dc=sit'
        

Za cn= se dosadí správcovský účet a dc záznamy se opraví také.

Jak vyčistit celou databázi?

        ldapsearch -x -b 'dc=moje,dc=sit'| cut -f 2 -d":"| ldapdelete -c -x -W -D "cn=admin,dc=moje,dc=sit"
        
POZOR!!! Toto opravdu odstraní VEŠKERÉ záznamy z LDAP-u.


Další možnost nám skýtá grafické prostředí a program gq. Pokud chceme pracovat vzdáleně, můžeme využít internetového prohlížeče a spravovat databázi přes web, viz
http://lam.sourceforge.net/.

Základní testování

Kromě čtení logů můžeme testovat, zda-li je otevřený port 389 nebo 636 na kryptovaném kanále. Pokud tyto testy jsou v pořádku, ale přeci něco nefunguje, pomůže nám ldapsearch.
        ldapsearch -L -x -W -D "cn=admin,dc=moje,dc=sit" -b 'dc=moje,dc=sit'
        
Tím zjistíme, co vlastně máme v databázi...

Máme více LDAP serverů

Replikace ldap serveru probíhá následovně: LDAP-server vyrobí replikační log, který si přečte slurpd (Standalone LDAP Update Replication Daemon), který jej vypropaguje na sekundární LDAP-servery. Aby server vyráběl replikační log, je třeba přidat parametr replogfile do globální sekce v slapd.conf. Tento parametr využívá i slurpd. Ale ostatní nastavení (jako TLS) si slurpd bere ze souboru /etc/ldap/ldap.conf.

Autentifikace s LDAP-em

Napřed je potřeba mít nainstalovaný balík pam s libpam-ldap a nscd.
Také je nutné mít v LDAP-u databázi uživatelů. Musí to být záznamy typu account, posixAccount a shadowAccount. Tyto třídy obsahují všechny parametry potřebné pro autentifikaci uživatele a jeho přihlášení do systému.
dn: uid=login,ou=People,dc=moje,dc=sit
uid: login
cn: Cele Jmeno
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: zakryptovaneheslo
shadowLastChange: 12320
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 5000
gidNumber: 5000
homeDirectory: /home/login
gecos: Ten Clovek Co se Snazi Dostat Do Systemu
Potom je nutné přesvědčit systém, aby si to vše bral z ldapu. To se provede jednoduchým poeditováním souborů: Vzorová konfigurace se nachází v adresáři /usr/share/doc/libpam-ldap/examples/ (Debian testing/unstable)

Odkazy...

LDAP Linux HOWTO
LDAP Implementation HOWTO
OpenLDAP 2.1 Administrator's Guide
OpenLDAP 2.1 Administrator's Guide: A Quick-Start Guide
http://www.avinci.de/competence/publikationen/diplomarbeit_norbert_klasen.pdf
OpenLDAP 2.1 Administrator's Guide: Using SASL
Single list of HOWTOs