Visszavonások :
Ez a dokumentum már nem érvényes, ezért nincs többé karbantartva.
|
OpenLDAP hitelesítési útmutató
1.
Bevezetés az OpenLDAP-ba
Mi az az LDAP?
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.
Nem értem. Mi az a könyvtár?
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
/ \
ou: people servers
/ \ ..
uid: .. jhon
|
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.
Jó... És mi haszna ennek?
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.
- Nyilvános kulcsú infrastruktúra
- Megosztott naptár
- Megosztott címjegyzék
- DHCP, DNS, stb. tárolása
- Rendszerszintű konfigurációs direktívák (több szerver beállításainak nyomkövetése)
- ...
2.
Az OpenLDAP beállítása
Kezdeti beállítások
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 /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
password-hash {md5}
TLSCertificateFile /etc/ssl/ldap.pem
TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem
TLSCACertificateFile /etc/ssl/ldap.pem
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
|
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
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.
3.
Létező adatok migrálása
Felhasználói fiókok migrálása
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;
|
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.
4.
A kliensek beállítása
A PAM beállítása
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 |
ssl start_tls
ssl on
suffix "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 |
# 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
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
OpenLDAP-jogok
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.
6.
Munka az OpenLDAP-pal
A könyvtár karbantartása
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.
7.
Köszönetnyilvánítások
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.
|