Visszavonások : Ez a dokumentum már nem érvényes, ezért nincs többé karbantartva. |
Az LDAP a Lightweight Directory Access Protocol rövidítése. Az X.500-ra alapulva átfogja annak a legtöbb fő funkcióját, de hiányzik belőle néhány olyan titokzatos funkció, amivel az X.500 rendelkezik. Mi ez a X.500 és miért van LDAP?
Az X.500 egy modell a könyvtár-szolgáltatásokra az OSI definíciója szerint. Ez tartalmaz névterület-definíciókat és protokollokat a lekérdezésekhez és a könyvtárak frissítéséhez. Az X.500-at azonban sok szituációban túlzásnak találták. Nézzünk bele az LDAP-ba. Az X.500-hoz hasonlóan biztosítja az adat/névterület modelleket a könyvtárakhoz és egy protokollt is. Ellenben az LDAP úgy lett tervezve, hogy közvetlenül a TCP/IP verem felett fusson. Tekints úgy az LDAP-ra, mint az X.500 karcsúsított változatára.
A könyvtár egy speciális adatbázis, amit gyakori lekérdezésekre, de nem gyakori frissítésekre terveztek. A szokványos adatbázisokkal ellentétben nem tartalmaznak támogatást a tranzakciókhoz vagy a visszaforgatáshoz. A könyvtárakat könnyen lehet többszörözni, az elérhetőség és megbízhatóság növelése végett. Amikor többszörözik a könyvtárakat, előfordulhatnak ideiglenes inkonzisztenciák (ellentmondások, belső hibák) addig, amíg a szinkronizálás be nem fejeződik.
Hogy épül fel az információ szerkezete?
Minden információ egy hierarchikusan rendezett könyvtárban van. Ha adatot akarsz bevinni egy könyvtárba, a könyvtárnak tudnia kell, hogyan kell a fa-szerkezetben ezt az adatot tárolni. Most nézzünk meg egy kitalált vállalatot és egy internetszerû fát:
Kódlista 1.1: A GenFic, egy kitalált Gentoo társaság szervezeti felépítése |
dc: com
|
dc: genfic (Szervezet)
/ \
ou: people servers (Szervezeti egységek)
/ \ ..
uid: .. jhon (A felhasználók adatai)
|
Mivel egy adatbázisnak nem ilyen ábrák formájában küldünk adatokat, a fa-szerkezet minden pontját meg kell határozni. Az ilyen pontok elnevezésére az LDAP egy név-sémát alkalmaz. A legtöbb LDAP terjesztés (beleértve az OpenLDAP-ot is) máris tartalmaz nagyszámú előre definiált (és általában elfogadott) sémát, mint az inetorgperson, ami egy gyakran használt séma a felhasználók meghatározására.
Akit mélyebben érdekel a téma, olvassa el az OpenLDAP Adminisztrációs Útmutatót.
Az LDAP-ot különféle célokra lehet használni. Ez a leírás a központosított felhasználó-kezelést tárgyalja, amikor minden felhasználói fiókot egyetlen LDAP-helyszínen tárolunk (ami nem jelenti azt, hogy egyetlen szerveren lenne, hiszen az LDAP nagyfokú elérhetőséget és redundanciát támogat), azonban más célokra is használható az LDAP.
Megjegyzés: Ez a leírás a genfic.com címet használja példának. Neked természetesen ki kell cserélned ezt. Azonban figyelj arra, hogy a legfelső csomópont egy hivatalos TLD (top level domain - legfelsőbb szintű domain, pl: net, com, cc, be..) legyen. |
Először is emergeljük a szükséges komponenseket:
Kódlista 2.1: Az OpenLDAP telepítése |
# emerge openldap pam_ldap nss_ldap migrationtools # chown ldap:ldap /var/lib/openldap-ldbm /var/lib/openldap-data /var/lib/openldap-slurp |
Szerkesszük az /etc/openldap/slapd.conf fájlt és adjuk hozzá a következőt a core.schema után:
Kódlista 2.2: /etc/openldap/slapd.conf |
# include-old a szükséges adatsémákat include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema # md5-tel titkosítsd a jelszavakat password-hash {md5} # Definiáld az SSL és a TLS tulajdonságait (opcionális) TLSCertificateFile /etc/ssl/ldap.pem TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem TLSCACertificateFile /etc/ssl/ldap.pem (Lejjebb...) database ldbm suffix "dc=genfic,dc=com" rootdn "cn=Manager,dc=genfic,dc=com" rootpw {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== directory /var/lib/openldap-ldbm index objectClass eq (A fentihez hasonló titkosított jelszót a slappasswd -h {Md5} segítségével kaphatsz.) |
Következő lépésként szerkesszük az LDAP konfigurációs fájlt:
Kódlista 2.3: /etc/openldap/ldap.conf |
# nano -w /etc/openldap/ldap.conf (Adjuk hozzá a következőt...) BASE dc=genfic, dc=com URI ldaps://auth.genfic.com:636/ TLS_REQCERT allow |
Most generálni fogsz egy SSL hitelesítő kódot a könyvtárad biztosításához. Válaszolj olyan jól a kérdésre, ahogy csak lehet. Amikor a rendes nevet (Common Name) kéri, add meg azt a nevet, amit a kliensek akkor fognak használni, amikor a szerverhez kapcsolódnak. Ez általában a teljes domainnév (pl: auth.genfic.com).
Kódlista 2.4: SSL-tanúsítvány generálása |
# cd /etc/ssl # openssl req -config /etc/ssl/openssl.cnf -new -x509 -nodes -out \ ldap.pem -keyout /etc/openldap/ssl/ldap.pem -days 999999 # chown ldap:ldap /etc/openldap/ssl/ldap.pem |
Most szerkeszd az /etc/conf.d/slapd fájlt és add hozzá a következőt, a már létező sor kikommentezésével:
Kódlista 2.5: /etc/conf.d/slapd |
OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'" |
Indítsd el a slapd-t:
Kódlista 2.6: A SLAPd indítása |
# /etc/init.d/slapd start
|
A következő paranccsal tesztelheted:
Kódlista 2.7: A SLAPd démon tesztelése |
# ldapsearch -D "cn=Manager,dc=genfic,dc=com" -W
|
Ha hibát kapsz, próbáld újra a -d 255 opció hozzáadásával, így részletesebb üzeneteket kapsz, és megoldhatod a problémát.
Most migrálni fogjuk a létező felhasználói fiókokat. Nyissuk meg a /usr/share/migrationtools/migrate_common.ph fájlt és szerkesszük a következő sorokat:
Kódlista 3.1: /usr/share/migrationtools/migrate_common.ph |
$DEFAULT_BASE = "dc=genfic,dc=com"; $EXTENDED_SCHEMA = 1; # Kommentezd ki ezeket a sorokat, hacsak nincs betöltve valamilyen levelező séma #$DEFAULT_MAIL_DOMAIN = "genfic.com"; #$DEFAULT_MAIL_HOST = "mail.genfic.com"; |
Most futtassuk a migráló szkriptet:
Kódlista 3.2: A migráló szkriptek futtatása |
# export ETC_SHADOW=/etc/shadow # cd /usr/share/migrationtools # ./migrate_base.pl > /tmp/base.ldif # ./migrate_group.pl /etc/group /tmp/group.ldif # ./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif # ./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif |
Ez utóbbi lépéssel átvittük a fenti fájlokat az LDAP által használt ldif-formátumba. Most adjuk hozzá a fájlokat a könyvtárunkhoz:
Kódlista 3.3: Az adatok importálása a könyvtárunkba |
# ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/base.ldif # ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/group.ldif # ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/passwd.ldif # ldapadd -D "cn=Manager,dc=genfic,dc=com" -W -f /tmp/hosts.ldif |
Ha hiba lépne fel az ldif fájlokban, újrakezdheted az utolsó jól működő lépéstől az ldapadd -c segítségével.
Először is beállítjuk a PAM-ot, hogy engedélyezze az LDAP-hitelesítést. Telepítsük a sys-auth/pam_ldap-ot, így a PAM támogatni fogja az LDAP-hitelesítést, és a sys-auth/nss_ldap-ot, hogy a rendszerünk LDAP-szerverekről tudjon lehívni kiegészítő információkat (amit az nsswitch.conf használ).
Kódlista 4.1: A pam_ldap és az nss_ldap telepítése |
# emerge pam_ldap nss_ldap
|
Most szerkeszd az /etc/pam.d/system-auth fájlt, hogy az alábbihoz hasonlóan nézzen ki:
Kódlista 4.2: /etc/pam.d/system-auth |
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok shadow auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account requisite pam_unix.so account sufficient pam_localuser.so account required pam_ldap.so password required pam_cracklib.so retry=3 password sufficient pam_unix.so nullok use_authtok shadow md5 password sufficient pam_ldap.so use_authtok use_first_pass password required pam_deny.so session required pam_limits.so session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0066 session optional pam_ldap.so |
Most szerkeszd az /etc/ldap.conf fájlt a következőképpen:
Kódlista 4.3: /etc/ldap.conf |
#host 127.0.0.1 #base dc=padl,dc=com ssl start_tls ssl on suffix "dc=genfic,dc=com" #rootbinddn uid=root,ou=People,dc=genfic,dc=com uri ldaps://auth.genfic.com/ pam_password exop ldap_version 3 pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberuid nss_base_passwd ou=People,dc=genfic,dc=com nss_base_shadow ou=People,dc=genfic,dc=com nss_base_group ou=Group,dc=genfic,dc=com nss_base_hosts ou=Hosts,dc=genfic,dc=com scope one |
Ezután másold át az (OpenLDAP) ldap.conf fájlt a szerverről a kliensre, hogy a kliensek lássák az LDAP-környezetet:
Kódlista 4.4: Az OpenLDAP ldap.conf másolása |
(Helyettesítsd az ldap-servert a saját LDAP-szervered nevével) # scp ldap-server:/etc/openldap/ldap.conf /etc/openldap |
Végül állítsd be a klienseket, hogy az LDAP-on keressék a rendszer felhasználóit:
Kódlista 4.5: /etc/nsswitch.conf |
passwd: files ldap group: files ldap shadow: files ldap |
A változások teszteléséhez írd be:
Kódlista 4.6: Az LDAP-hitelesítés tesztelése |
# getent passwd|grep 0:0 (Két bejegyzést kell visszakapnod:) root:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash |
Talán észrevetted már, hogy az egyik sor, amit bemásoltál az /etc/ldap.conf-ba, ki volt kommentezve (a rootbinddn sor): nincs erre szükséged, hacsak nem akarod valamelyik felhasználó jelszavát rendszergazdaként megváltoztatni. Ebben az esetben nyers szövegként kell echozni a rendszergazdai jelszót az /etc/ldap.secret fájlba. Ez VESZÉLYES és a fájl jogosultságait érdemes chmod-dal 600-ra változtatni. Én (a cikk eredeti írója) mindig üresen hagyom azt a fájlt, és ha valakinek a jelszavát meg kell változtatnom, ami mind az ldap-ban, mind az /etc/passwd-ben szerepel, a jelszót arra a 10 másodpercre teszem oda, amíg megváltoztatom a jelszót, utána kitörlöm.
5. Az LDAP-szerver biztonsági beállításai
Ha megnézed az /etc/openldap/slapd.conf fájlt, látni fogod, hogy meghatározhatod az adatok ACL-jeit (Access Control List, hozzáférési lista), azaz hogy a felhasználók mit olvashatnak/írhatnak:
Kódlista 5.1: /etc/openldap/slapd.conf |
access to * by dn="uid=root,ou=people,dc=genfic,dc=com" write by users read by anonymous auth access to attrs=userPassword,gecos,description,loginShell by self write |
Ezzel hozzáférést ad mindenhez, amit egy felhasználó képes lehet megváltoztatni. Ha az a te információd, akkor írni is tudod, ha másé, akkor csak olvasni. A névtelenek küldhetnek azonosítót és jelszót, hogy bejelentkezzenek. Négy szint van, a legalacsonyabbtól a legmagasabbig: hitelesítés keresés olvasás írás (auth search read write).
A következõ ACL egy kicsit biztonságosabb, mert nem engedi a sima felhasználóknak, hogy más titkosított jelszavát olvassák:
Kódlista 5.2: /etc/openldap/slapd.conf |
access to attrs="userPassword" by dn="uid=root,ou=people,dc=genfic,dc=com" write by dn="uid=John,ou=People,dc=genfic,dc=com" write by anonymous auth by self write by * none access to * by dn="uid=root,ou=People,dc=genfic,dc=com" write by * search |
Ez a példa a root-nak és Johnnak hozzáférést ad az olvasás/írás/kereséshez a fa-szerkezetben a dc=genfic,dc=com-nál lejjebb. Továbbá lehetővé teszi a felhasználóknak, hogy megváltoztassák a saját userPassword-jüket. A végén szereplő kijelentés mindenkinek lehetővé teszi a keresést, ami azt jelenti, hogy alkalmazhatnak egy kereső szűrőt, de nem olvashatják el az eredményeket. Több ACL-ed is lehet, de az ökölszabály az, hogy ezek alulról felfelé érvényesülnek, így a legfelső szintnek kell a legkorlátozóbbnak lennie.
Elkezdheted használni a könyvtárat a felhasználók hitelesítésére az apache/proftpd/qmail/samba-ban. Ezt kezelheted a Webminen keresztül, ami egy igazán könnyen használható beállító-felületet nyújt. Továbbá használhatod a gq-t vagy a directory_administrator-t is.
Szeretnénk köszönetet mondani Matt Helernek, hogy kölcsönadta a gépét ennek a leírásnak az elkészítéséhez. Köszönetet mondunk még a srácoknak az #ldap @ irc.freenode.net-en.
Ez a dokumentum a Creative Commons - Attribution / Share Alike licensz védelme alatt áll.