2012. május 11., péntek

Felhasználók hitelesítése OpenLDAP-pal Ubuntu 12.04-en

A mai alkalommal megoldjuk a felhasználók OpenLDAP címtárban való tárolását és hitelesítését.
(You can read this post in English too.)
Kezdjük azzal, hogy a csomagtelepítéskor minden kérdést feltetetünk magunknak:
sudo dpkg-reconfigure debconf
És itt válasszuk az alacsony prioritást.
Aztán ellenőrizzük a az /etc/hosts fájlt, mert hajlamos szutyok lenni. Legyen ilyen (mármint ha az ember az ubuserver gépen van, az itthon.cucc tartományban):
127.0.0.1       localhost.localdomain localhost
192.168.56.101  ubuserver.itthon.cucc ubuserver
Most már végre telepítünk.
sudo apt-get install slapd
Minden beállítást hagyhatunk alapértelmezetten, a fontos, hogy lássuk, hogy mi mindent "válaszoltunk". Nálam a base DN értéke itthon.cucc lesz. A jelszót érdemes megjegyezni.
Hát ezzel a slapd-vel még keveset kezdhet az ember, úgyhogy jöhetnek a segédprogramok:
sudo apt-get install ldap-utils
Jegyezzük meg magunknak - a későbbiekben még jó lesz -, hogy a konfigurációt így tudjuk megnézni:
sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
A már telepített sémák listázása:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
Kiderül, hogy pont az a négy séma van fenn, amit minden tutorial elsőként izzít be:)
A címtár "valós" adatinak (felhasználóknak, csoportoknak miegymásnak) listázása:
ldapsearch -D cn=admin,dc=itthon,dc=cucc -b dc=itthon,dc=cucc -W -LLL
Na igen, elég üres, még nincs benne, csak a base DN, és az adminisztrátor.

Nyissunk egy fájlt, legyen mondjuk egysegek.ldif:
dn: ou=People,dc=itthon,dc=cucc
objectClass: top
objectClass: organizationalUnit
ou: People
description: ide kerulnek az userek

dn: ou=Groups,dc=itthon,dc=cucc
objectClass: top
objectClass: organizationalUnit
ou: Groups
description: ide kerulnek a csoportok
És adjuk hozzá az LDAP-hoz:
ldapadd -x -D cn=admin,dc=itthon,dc=cucc -w titok -f egysegek.ldif

Nyissunk egy másik fájlt: peldacsoport_es_peldajuzer.ldif (az ékezetes neveket ne eröltessük mert azokat először base64-kódolni kellene):
dn: cn=peldacsoport,ou=Groups,dc=itthon,dc=cucc
objectClass: posixGroup
cn: peldacsoport
gidNumber: 5000
description: peldacsoport (torolheto)

dn: uid=bela,ou=People,dc=itthon,dc=cucc
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: bela
sn: Pelda
givenName: Bela
cn: Pelda Bela
displayName: Pelda Bela
uidNumber: 10000
gidNumber: 5000
userPassword: belavagyok
gecos: Pelda Bela
loginShell: /bin/bash
homeDirectory: /home/bela
description: peldajuzer (torolheto)
És adjuk hozzá az LDAP-hoz:
ldapadd -x -D cn=admin,dc=itthon,dc=cucc -w titok -f peldacsoport_es_peldajuzer.ldif

Kapcsoljuk be a loggolást. Először is készítsük el a logging.ldif fájlt:
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: stats
És adjuk hozzá az LDAP-hoz:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f logging.ldif
(A loggolás alapból a syslog-ba kerül. Ha nem tetszik, a local4-et kell átirányítanod.)

Következne az ACL-ek beállítása, de jó nekünk az alapértelmezett. A kiolvasása:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(olcDatabase={1}hdb)' olcAccess

Átmegyünk a kliensünkre. Először itt is kiadjuk a
sudo dpkg-reconfigure debconf
parancsot és alacsonyra állítjuk a kérdésküszöböt. Aztán telepítünk egy csomagot, ami magával ránt még egy jó adagot:
sudo apt-get install libnss-ldap
Kapunk egy csomó kérdést - az alapértelmezett válaszok jók, kivéve hármat. Az egyik az LDAP server Uniform Resource Identifier, ami legyen a szerverünk, és nem ldapi:///, hanem ldap:// - nálam például ldap://ubuserver.itthon.cucc. A másik a Distinguished name of the search base, ami nálam dc=itthon,dc=cucc . (A pont már nem.) A harmadik pedig a Make local root Database admin ami legyen no.
A válaszaink alapján létrejön az /etc/ldap.conf, nézzük át, ha van kedvünk. Ha az előző dialógus mégegyszer kellene, adjuk ki a sudo dpkg-reconfigure ldap-auth-config parancsot.
Mostanára a kliensünk tudja, hogy kivel kell majd beszélgetnie, de ezt a majd még nem jött el számára. Ha most adjuk ki a
getent passwd
parancsot, csak a helyi felhasználókat látjuk. Példa Béla még nincs. Kiadhatjuk a
getent group
parancsot is, itt sincs még példacsoport.
Az van még hátra, hogy az /etc/nsswitch.conf fájlba betegyük, amit kell. Egy ideje már nem kézzel végezzük ezt, hanem a
sudo auth-client-config -t nss -p lac_ldap
parancs kiadásával.
Ha most kiadjuk az előző két getent-parancsot, akkor meglesz a példacsoport, és meglesz Béla is. Kiadhatjuk a sudo pam-auth-update parancsot, is, abból látszik, hogy tényleg használjuk az LDAP-ot. És ha szeretnénk egy kicsit Példa Béla lenni, akkor:
sudo su bela
Na, ez akkor megvolt. Legalábbis, ami az alapokat illeti. Indexeléssel folytatódik a munka.

Irodalom:
http://www.openldap.org/lists/openldap-technical/201007/msg00232.html
https://help.ubuntu.com/11.10/serverguide/C/openldap-server.html

3 megjegyzés:

Máté Molnár írta...
Ezt a megjegyzést eltávolította a szerző.
Koczka Ferenc írta...

Szia!
Kösz a leírást, hasznos volt. Egy kérdésem van: ha felveszel egy usert pl. ldapadminnal, el lehet érni, hogy a home könyvtára létrejöjjön?
Vagy van valamilyen más tool erre, amit a felhasználó kezébe lehetne adni?
KF

raerek írta...

Kérlek, szívesen:)
A barátod a LAM (LDAP Account Manager), azon belül pedig telepítened kell a ldamdaemon-t (ami nem démon, hanem egy perl script).