LDAP

A HupWiki-ből...

Tartalomjegyzék

Bevezető

LDAP - Lightweight Directory Access Protocol

Ez egy "directory service" (címtár szolgáltatás) amely egy hierarchikus adatbázis. A relációs adatbázistól eltérően (mint amilyen pl. az SQL adatbázis szerver), nem táblákba van szervezve az adatbázis, hanem egy gráf felépítéséhez hasonlóan ágakra bomlik.

Tipikusan olyan környezetben használjuk, ahol a lekérdezések száma jóval fölülmúlja a változtatások számát, illetve a lekérdezés egyszerű művelet, és általában minél kevesebb válasszal jár. Ilyen például az authentikáció biztosítása bizonyos szerver processzek számára.

Maga az LDAP egy protokoll, és nem egy konkrét termék. LDAP szerver szabadon elérhető verziója az OpenLDAP.

Számos cég nyújt termékeiben LDAP-ra épülő címtár szolgáltatásat. Ilyen szolgáltatások például a Novell NDSe, vagy a Microsoft Active Directory-ja.

Egy bejegyzés szerkezete

A faszerkezet minden csúcsa azonos szerkezetű. A megengedett tulajdonságokat speciális tulajdonságok határozzák meg, melyek neve objectClass. Mivel ezek is attribútumok, az LDAP szervernek ismernie kell. Mind az objectClass, mind az egyéb tulajdonság szerkezete ún. sémákban van megadva. Egy-egy objectClass esetén adott, hogy mely attribútumok kötelezőek, melyek megengedettek, általában van egy rövidebb leírás (és egy szintaxist leíró rész is).

Amikor konzolban keresünk, vagy hozzáadunk bejegyzéseket, általában szöveges LDIF formátumot használunk. Erre példa a következő:

dn: ou=Group,dc=example,dc=com
objectClass: organizationalUnit
ou: Group

Ez a legegyszerűbb eset, mert csak egyetlen osztályba tartozik. Azonban gyakran nincs így, mert több osztály határozza meg az összes szükséges attribútumot, például felhasználók esetén.

Minden bejegyzést egyedileg azonosítani kell tudni, erre szolgál az első sor, a dn, amely egyedi név, azt írja le, hogy a fa gyökeréből (ami itt dc=example,dc=com) hogyan lehet az adott bejegyzéshez eljutni.

Az organizationalUnit, szervezeti egység egyetlen kötelező tulajdonságot ír elő, ezzel is azonosítjuk a bejegyzést, ez pedig az ou, vagyis szervezeti egység.

Telepítés Debianon

Vegyünk egy tipikus helyzetet: adott egy szerver, ami a bejelentkezéseket kezeli és rajta vannak a home könyvtárak is, a klienseken telepített OS-en vannak a programok, a home-ot NFS-en csatolja fel. Az Openldap elérhető csomagból,

apt-get install slapd ldap-utils migrationtools

illetve érdemes felrakni a migrationtools csomagot is, ha meglévő usereinket, csoportjainkat akarjuk átrakni LDAP-ba. A klienseken érdemes telepíteni az NSCD-t, a kényelmes adminisztrációhoz a lent is említett phpldapadmint.

Az LDAP bejelentkezés beállítása az alábbi lépésekből fog állni: 1, az OpenLDAP telepítése, beállítása 2, meglévő userek beimportálása (passwd, groups file-ok, vagy meglévő NIS adatbázis) 3, kliensek beállítása

Telepítés Gentoo Linuxon

Gentoon két csomagot kell felrakni:

emerge net-nds/openldap net-nds/migrationtools

SElinux esetén egy további csomag szükséges:

emerge sec-policy/selinux-openldap

Az OpenLDAP telepítése, beállítása

A beállítások a /etc/openldap könyvtárban találhatóak, mind a szerver, mind a kliens fájljai.

A /etc/openldap/slapd.conf

A szerver beállítófájlja. Alapvető részei: sémák, hozzáférés-vezérlési listák (ACL), adatbázis beállítások.

Sémák

A sémákat a következőképpen lehet megadni, egy lehetséges kombináció:

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema
include         /etc/openldap/schema/misc.schema


ACL beállítások

Az első esetben a jelszó tulajdonság jogainak szabályozása:

access to attrs=userPassword
       by dn="cn=admin,dc=example,dc=com" write
       by anonymous auth
       by self write
       by * none

Eszerint az adott bejegyzés a saját jelszavát írhatja (by self write), névtelen felhasználónak hitelesítenie kell magát (by anonymous auth), a cn=admin,dc=example,dc=com bejegyzésnek (ami Debian esetén automatikusan létrejön, pl. Gentoo esetén létre kell hozni) is van joga írni, mindenki másnak még olvasni sem. Az írási jog magában foglalja az olvasás jogot (ez nincs minden rendszeren így, amilyen pl. az rsync).

Másik példa:

access to dn.children="ou=People,dc=example,dc=com"
       by dn="cn=admin,dc=example,dc=com" write
       by self write
       by * read

Itt hasonlók a beállítások, az eltérés annyi, hogy most az összes ou=People,dc=example,dc=com alatti bejegyzésre vonatkozik, ahol a rendszer felhasználóit találhatjuk. Linux esetén ez a People szervezeti egység alatt szerepel, de itt-ott látni Users-t is.

A fenti két szabályozás mellett már egész jól beállított rendszert kapunk, viszont mindenképpen érdemes végiggondolni, hogy ez így elég biztonságos-e, vagy további beállítást igényel, ugyanis az alap beállítás egy bejegyzésre a következő:.

access to * by * read

Ami fontos, hogy a jogosultságok meghatározása fentről lefele történik, vagyis amire már beállítottunk valamit, utána így is marad. FIXME: tényleg így van?

Adatbázis beállítások

Egy példa, amit lejjebb részletesen megnézünk:

database        bdb
suffix          "dc=example,dc=com"
rootdn          "cn=Manager,dc=example,dc=com"
rootpw          {SSHA}blablabla
checkpoint      32      30 # <kbyte> <min>

# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory       /var/lib/openldap-data
# Indices to maintain
index   objectClass     eq

Az adatbázis Berkeley DB, ami nagyon gyors, ezért javasolt használni (database bejegyzés).
A suffix a csúcsok egyedi nevének végét adja meg, lényegében ez a faszerkezet gyökere.
A rootdn az egyik legfontosabb beállítás, ez az a "felhasználó", aki mindent tud írni.
A rootpw az rootdn jelszava, alapesetben titkosítás nélküli, de ez nem javallott, hiszen még ha meg is szerzi valaki ezt, sok időbe telik feltörni egy titkosított jelszót, ami alatt esetleg ki lehet cserélni a jelszót egy újra, így az ldap szerver (megint csak esetleg) biztonságosan tovább futhat.

Mivel a jelszó titkosított, ezért ezt valahogy elő kell állítani. Az SSHA jó választás (man slappasswd):

slappasswd -h {SSHA}

A generált szöveget kell beilleszteni a rootpw után.

Az LDAP gyökere

Debian esetén automatikusan létrejön az LDAP gyökere, Gentoo esetén viszont kézzel kell felvenni. Ehhez kedvenc szövegszerkesztőnket használva hozzunk létre egy fájlt:

dn: dc=example.dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Valamilyen Szervezet

Az o tulajdonság nem kötelező.

Az admin és manager bejegyzések:

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
objectClass: top
cn: Manager

illetve

dn: cn=admin,dc=example,dc=com
objectClass: organizationalRole
objectClass: simpleSecurityObject
cn: admin
description: LDAP administrator

Ennek felvétele (fenti 3-at ebben a sorrendben, "file.ldif" nevű fájlban egyesével), mindkét megoldás megfelelő:

ldapmodify -a -x -D cn=Manager,dc=example,dc=com -W -f file.ldif
ldapadd -x -D cn=Manager,dc=example,dc=com -W -f file.ldif

A két parancs ekvivalens, mindkettő bekéri a jelszót.


Az LDAP gyökerünkbe vegyünk fel két OU típusú objektumot: egy "Group"-ot és egy "People"-t.

Meglévő userek beimportálása (passwd, groups file-ok, vagy meglévő NIS adatbázis)

Lépjünk be az /usr/share/migrationtools könyvtárba és adjuk ki a csoportok és jelszavak/userek importálására szolgáló parancsot:

cd /usr/share/migrationtools
./migrate_group.pl /etc/group ~/groups.ldif
./migrate_passwd.pl /etc/passwd ~/passwd.ldif

A keletkező állományokból töröljük ki a nem szükséges csoportokat (rendszer csoportok, szolgáltatások userei), majd importáljuk be a phpldapadminnal.

Kliensek beállítása

Telepítsük ezeket:

apt-get install libpam-ldap ldap-utils finger-ldap


Az átírandó konfigurációs fájlok:


/etc/ldap.conf

Adjuk meg bennne az ldap szerverünk információit (URI, base dn).


/etc/nsswitch.conf

Itt állítható be, hogy milyen dolgokat is szeretnénk ldap-ból venni. Nekünk user/pass/shadow kell, írjuk be ezekbe a sorokba hogy 'ldap'. Hogy hova, azt mindenki döntse el, miután mérlegelte a következményeket. Ha kitörlünk mindent és csak 'ldap'-ot írunk, akkor minden onnan fog menni, még rendszerfelhasználók is - célszerű a konfig sor végére írni, ekkor ha nem találja helyben, akkor fordul az ldap-hoz.


/etc/pam.d/common-auth
/etc/pam.d/common-password
/etc/pam.d/common-session
/etc/pam.d/common-account

Külső hivatkozások

phpLDAPadmin

Beállítás nem-PAM környezetben (Slackware, Frugalware)

Angol nyelvű leírás

Másik leírás, Debian szemszögből, szintén angolul

Consulting cég (!) leírása: LDAP+PAM

LDAP-ról pár szóban

LDAP HOGYAN

OpenLDAP hitelesítési útmutató

LDAP, Kerberos,levelezés, stb. beállítása (pdf); dvi-ként