Ez a dokumentum betekintést nyújt az LDAP lehtőségeibe, és egy szerver implementáció, az OpenLDAP projekthez tartozó slapd használatába a teljesség igénye nélkül. Nem vállalkoztam arra, hogy minden angol terminológiából ismert szakkifejezést magyarítok.
További dokumentációk elérhetőek itt: http://www.openldap.org. Ez a dokumentum tárgyal olyan témaköröket, melyeket itt nem tárgyalunk (pl. adatbázis replikáció, elosztott adatbázis üzemeltetése, TLS konfigurálása).
Az információ egy faszerű szerkezetben tárolódik, és minden csúcsában bejegyzések (entry) szerepelnek. Egy bejegyzésnek van típusa, amely meghatározza, hogy milyen attribútumai lehetnek. Minden egyes ilyen bejegyzésre egyértelműen hivatkozhatunk a bejegyzés DN-jével (Distinguished Name), mely lényegében a fában a csúcshoz vezető utat írja le.
Illusztrációként hadd vegyem kölcsön az OpenLDAP dokumentációból ezt a képet:
Ebben az esetben a dc (domain component) bejegyzések az Internet domain nevek elrendeződését veszik alapul. A példában az example.com site hierarchiájának egy részlete látható. A legmélyebben fekvő csúcs DN-je: uid=babs,ou=People,dc=example,dc=com
ldapsearch -Y GSSAPI -b ou=people,dc=inf,dc=elte,dc=hu -s one '(cn=sandor antal)'A -Y GSSAPI opcióval azt mondjuk meg, hogy a bejelentkezéskor megszerzett Kerberos ticket-ünket használjuk authentikációra. További információk az ldapsearch programról.
Egy bejegyzés törölhető az ldapdelete programmal. A törölni kívánt bejegyzésre természetesen a DN-vel hivatkozunk.
A séma megadásánál először attribútumokat definiálunk, megadjuk az attribútum nevét, a szintaxisát (típusát), azt, hogy milyen illesztés végezhető rá, hogy egyértékű, vagy esetleg több értéke is lehet-e, stb. Lehetőség van egy attribútum esetén "szülő" attribútum megadására, az attribútum a szülő attribútumtól minden tulajdonságot átvesz. Sőt! A szülő attribútumra alkalmazott szűrők vizsgálatánál a gyerek attribútum értékei is ellenőrzésre kerülnek!
Attribútumokból aztán objektum típusokat állíthatunk össze. Ezek definíciója megadja, hogy melyik attribútumnak kell benne lennie, és melyik attribútumnak szabad szerepelnie egy ilyen típusú bejegyzés esetében. Ezek is "örökölhetnek" egymástól.
Minden egyes attribútum, objektum típus, szintaxis rendelkezik egy numerikus és egyedi azonosítóval, aminek a neve OID (Object IDentifier). Egy tartományt bármilyen szervezet bármikor igényelhet, az igénylés ingyenes. Ennek a célja az, hogy ezek az azonosítók ne ütközzenek egymással. Tesztelésre mindenesetre fenntartottak egy tartományt, ezt csak lokálisan szabad használni, és soha nem fogják kiadni senkinek használatra. Ez a tartomány az 1.1-es. Példaképpen a dc, azaz domainComponent attribútum OID-je: 0.9.2342.19200300.100.1.25
A konfiguráció során nem fogjuk a kliens gépet kizárólag LDAP-os authentikációra
beállítani. Ennek az az oka, hogy mindig kell lokális felhasználó, akinek akkor
is be kell tudni jelentkezni, ha az LDAP szerver éppen nem elérhető. A
legfontosabb a root, neki lokálisnak kell lennie. Nem fogok minden konfigurációs
filet teljes egészében beilleszteni, amit módosítani fogunk, csupán a fontosabb
sorokat mutatom.
Másrészről ez előnyös nekünk azért is, mert ilyen módon a tesztrendszerbe csak
kicsit kell belenyúlni, minden lokális felhasználó megmarad.
apt-get install ldap-utils
apt-get install slapd
# ez a bejegyzés hozza létre a szervezi egységet, amibe a csoportokat tesszük dn: ou=Groups,dc=teteny,dc=elte,dc=hu objectClass: organizationalUnit ou: Groups # ez a bejegyzés a fent létrehozott ou alá létrehozza a vesztesek csoportját dn: cn=loosers,ou=Groups,dc=teteny,dc=elte,dc=hu objectClass: posixGroup cn: loosers gidNumber: 1100 description: Group of loosers # ez a bejegyzés a fent létrehozott ou alá létrehozza a lámák csoportját dn: cn=lamers,ou=Groups,dc=teteny,dc=elte,dc=hu objectClass: posixGroup cn: lamers gidNumber: 1101 description: Group of lamersEzután simple authentikációt és az admin user DN-jét megadva, a prompthoz a az admin jelszót megadva létrehozhatjuk ezeket a bejegyzéseket. Adjuk ki a következő parancsot:
ldapmodify -a -x -D cn=admin,dc=teteny,dc=elte,dc=hu -W -f /tmp/entriesFONTOS! A gidNumber értékeket úgy kell megválasztani, hogy ilyen értékkel lokális csoport ne létezzen a /etc/group fileban!
Következő lépésként felhasználót hozzunk létre. Egy felhasználó típusának a posixAccount osztályt választjuk, mert ez megköveteli azokat az attribútumokat, melyek szükségesek lesznek majd az authentikációhoz. Írjuk a követekezőket a /tmp/looser fileba:
dn: cn=Looser User,ou=People,dc=teteny,dc=elte,dc=hu objectClass: posixAccount cn: Looser User gecos: Looser User uid: looser uidNumber: 1100 gidNumber: 1100 homeDirectory: /home/looser loginShell: /bin/bash userPassword: looserMajd adjuk ki a következő parancsot:
ldapmodify -a -x -D cn=admin,dc=teteny,dc=elte,dc=hu -W -f /tmp/looserFONTOS! Az uidNumber értéket úgy kell megválasztani, hogy ilyen értékkel lokális felhasználó ne létezzen a /etc/passwd fileban!
A szerver készen áll, hogy felhasználói információkra vonatkozó kéréseket szolgáljon ki. Bár a userPassword attribútumot most kódolatlanul küldtük el az LDAP szervernek, de a /etc/ldap/slapd.conf fileban a userPassword attribútumhoz csak az admin-nak és a self-nek van hozzáférési joga, ezért más nem fogja tudni olvasni.
Megjegyzés: Az ldapexplorer csomagot feltelepítve és bekonfigurálva kényelmesen böngészhetjük a directory-t.
Az NSS (Name Service Subsystem) feladata például elvégezni a felhasználói nevek és az uidNumber egymáshoz rendelését. Ennek bekonfigurálása lesz a következő lépésünk. Telepítsük fel az ehhez szükséges csomagot:
apt-get install libnss-ldapNyissuk meg az /etc/nsswitch.conf filet, és módosítsunk néhány sort, hogy az NSS lokális fileokban, s azután LDAP-ban keresse meg a leképezéshez szükséges információt:
passwd: files ldap group: files ldap shadow: files ldapEzután az imént feltelepített lib számára adjuk meg az LDAP szerverünk elérhetőségét a /etc/libnss-ldap.conf fileban:
host 127.0.0.1 base dc=teteny,dc=elte,dc=huPróbáljuk is ezt ki azonnal! Hozzunk létre egy temp filet, adjuk oda looser-nek. Az ls -l parancs az uidNumber->uid leképezéshez az NSS-t használja, ezért rögtön kiderül, hogy az NSS konzultál-e az LDAP szerverrel:
neptune:~# touch /tmp/test neptune:~# chown 1100.1100 /tmp/test neptune:~# ls -l /tmp/test -rw-r--r-- 1 looser loosers 0 Apr 30 11:40 /tmp/testMiután az uidNumber és gidNumber értékeket úgy választottuk meg, hogy azok ne szerepeljenek a lokális fileokban, ezek az információk mindenképpen az LDAP szervertől származnak.
A Debian a potato óta PAM-ot használ. Az authentikációhoz fel kell tenni az LDAP-os PAM csomagot:
apt-get install libpam-ldapMajd a konfigurációja során meg kell adni az LDAP szerver elérhetőségét a /etc/pam_ldap.conf fileban. Ha minden jól megy, ehhez a filehoz nem kell nyúlni, mert a csomag telepítése során feltett kérdésekre válaszolva a megfelelő file legenerálódik.
host 127.0.0.1 base dc=teteny,dc=elte,dc=hu rootbinddn cn=admin,dc=teteny,dc=elte,dc=hu scope sub pam_password exopMinden szolgáltatás (service, program), ami használ PAM-ot külön konfigurációs filelal rendelkezik a /etc/pam.d könyvtárban. Minden egyes szolgáltatást külön be kell konfigurálni arra az estre, ha szeretnénk, hogy az a szolgáltatás használja az LDAP szervert authentikációhoz. Mivel a feladat minden esetben ugyanaz, a példában mi csak login szolgáltatást konfiguráljuk, valamint a passwd szolgáltatást a jelszó megváltoztatásához. Módosítsuk a /etc/pam.d/login filet, hogy tartalmazza a következő sorokat:
auth sufficient pam_unix.so nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so password sufficient pam_unix.so nullok obscure min=4 max=8 md5 password sufficient pam_ldap.soA /etc/pam.d/passwd file a következőképpen módosítandó:
password sufficient pam_unix.so nullok obscure min=4 max=8 md5 password sufficient pam_ldap.soEzek után lépjünk be looser felhasználóként (nem nagy baj, ha előtte létrehozzuk a home könyvtárát), használhatjuk a passwd programot a jelszó megváltoztatására.
neptune:~# ldapmodify -x -D cn=admin,dc=teteny,dc=elte,dc=hu -W Enter LDAP Password: dn: cn=lamers,ou=Groups,dc=teteny,dc=elte,dc=hu changetype: modify add: memberUid memberUid: looser modifying entry "cn=lamers,ou=Groups,dc=teteny,dc=elte,dc=hu" neptune:~#Jelentkezzünk be újra és ellenőrizzük le, hogy sikeres volt-e:
looser@neptune:~$ id uid=1100(looser) gid=1100(loosers) groups=1100(loosers),1101(lamers)További módosításokat már az olvasó fantáziájára bízom. További információkért a dokumentumban szereplő linkeket érdemes felkeresni.
apt-get install nscd