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
Beállítás nem-PAM környezetben (Slackware, Frugalware)
Másik leírás, Debian szemszögből, szintén angolul
Consulting cég (!) leírása: LDAP+PAM