Visszavonások : Ez a dokumentum már nem érvényes, ezért nincs többé karbantartva.

OpenLDAP hitelesítési útmutató

Benjamin Coles  Szerző
Sven Vermeulen  Szerkesztő
Brandon Hale  Szerkesztő
Benny Chuang  Szerkesztő
Barak Tamás  Fordító
Konkoly Katalin  Frissítés

Frissítve 2005. október 21.
Ezen dokumentum eredeti változatának utolsó frissítési dátuma 2008. november 11.

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         (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.

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.

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-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.

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;
# 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.

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

#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

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.