Az LDAP egy olyan adatbázisok gyűjtőneve, amelyekkel Lightweight Directory Access Protocol-on keresztül lehet beszélgetni, s magát az adatbázist úgy tervezték, hogy sokkal többször és gyorsabban lehet belőle olvasni, mint írni. Alapvető célja olyan adatok tárolása, amelyeket gyakran olvassuk és ritkán írjuk: belépési adatok, email címek, domén adatok, stb.
Telepítés
Az CentOS operációs rendszeren (és a legtöbb UNIX szerű rendszeren) az OpenLDAP szervert tudjuk használni, amely mellé érdemes feltelepíteni a PhpLdapAdmin nevű programot, amely lehetőséget ad arra, hogy az LDAP tartalmát viszonylag könnyen tudjuk módosítani.
# yum install openldap-servers.x86_64 openldap-clients.x86_64 phpldapadmin.noarch mod_authz_ldap.x86_64
Az OpenLDAP a slapd álnéven futna, így ezt kell keresnünk a szolgáltatásaink között:
# chkconfig --list | grep slapd
slapd 0:ki 1:ki 2:ki 3:ki 4:ki 5:ki 6:ki
# chkconfig slapd on
# chkconfig --list | grep slapd
slapd 0:ki 1:ki 2:be 3:be 4:be 5:be 6:ki
Konfiguráció
A telepítés egyszerű volt, de még messze nem vagyunk kész… jó néhány beállítás szükséges lesz, mint például a base_dn megadása, amely alapból dc=example,dc=com szokott lenni, ezt cseréljük le a saját domain nevünkre, illetve állítsunk be egy jelszót, amelyet legenerálunk:
$ slappasswd
New password:
Re-enter new password:
{SSHA}YyNBMNeYiDt/1+FzhwX7FWj6yJBjJDAp
Alapvetően a fura nevű – bdb.ldif végű – fájlt kell módosítanunk:
5c5
< olcSuffix: dc=my-domain,dc=com
---
> olcSuffix: dc=javaforum,dc=hu
10c10
< olcRootDN: cn=Manager,dc=my-domain,dc=com
---
> olcRootDN: cn=Manager,dc=javaforum,dc=hu
44a45
> olcRootPW: {SSHA}YyNBMNeYiDt/1+FzhwX7FWj6yJBjJDAp
Hasonlót kell tennünk a másik – monitor.ldif végű – fájl esetén is:
5c5
< l,cn=auth" read by dn.base="cn=manager,dc=my-domain,dc=com" read by * none
---
> l,cn=auth" read by dn.base="cn=manager,dc=javaforum,dc=hu" read by * none
Másoljuk át a DB_CONFIG mintát a szerver adatbázisához, majd indítsuk el a slapd szolgáltatást:
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# service slapd start
Starting slapd: [ OK ]
Az LDAP tesztelése
Érdemes leellenőrizni, hogy helyesen működik-e az LDAP szerverünk, így hozzunk létre egy saját ldif fájlt, amelybe írjunk bele pár adatot:
dn: dc=javaforum,dc=hu
objectclass: dcObject
objectclass: organization
o: Java Forum
dc: javaforum
dn: cn=Manager,dc=javaforum,dc=hu
objectclass: organizationalRole
cn: Manager
Ezen után futtassuk az ldap_add programot:
# ldapadd -a -x -D "cn=Manager,dc=javaforum,dc=hu" -W -f startup.ldif
Enter LDAP Password:
adding new entry "dc=javaforum,dc=hu"
adding new entry "cn=Manager,dc=javaforum,dc=hu"
Majd kérdezzük vissza az OpenLDAP szervertől, hogy megjegyezte-e:
ldapsearch -x -b 'dc=javaforum,dc=hu' '(objectclass=*)'
# extended LDIF
#
# LDAPv3
# base <dc=javaforum,dc=hu> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# javaforum.hu
dn: dc=javaforum,dc=hu
objectClass: dcObject
objectClass: organization
o: Java Forum
dc: javaforum
# Manager, javaforum.hu
dn: cn=Manager,dc=javaforum,dc=hu
objectClass: organizationalRole
cn: Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
Megjegyezte… 🙂
Van web alapú adminisztrációs eszköz?
Célszerű dolog egy web alapú adminisztrációs eszközt beüzemelni, amivel el tudjuk érni az LDAP adatbázisunkat: egyrészt könnyebb az LDAP fát kezelni, másrészt nem mindig tudunk parancssoros eszközökhöz hozzáférni. Túl sok webes eszköz között nem tudunk válogatni, gyakorlatilag a PhpLdapAdmin létezik, illetve az Ldap Account Manager. Én az előbbit preferálom, ugyanis a fejezet elején a telepítésnél már fel is került…
PhpLdapAdmin beállítása
A PhpLdapAdmin beállítását két helyen kell megejtenünk, ezek közül az első az Apache Httpd beállítása, ahol a localhost helyett az összes kliens számára elérhetővé tesszük a felületet (paranoidabb felhasználók szűkíthetik a saját IP címükre vagy IP tartományukra). Elsőképp nevezzük át a telepítéssel érkező állományt:
<VirtualHost *:80>
ServerAdmin auth.gabor@javaforum.hu
DocumentRoot /usr/share/phpldapadmin/htdocs
ServerName ldapadmin.javaforum.hu
DirectoryIndex index.php index.html index.htm
<Directory /usr/share/phpldapadmin/htdocs>
Order Deny,Allow
Deny from all
Allow from all
# Allow from ::1
</Directory>
ProxyVia Off
ProxyPreserveHost On
</VirtualHost>
A második beállítás a PhpLdapAdmin konfigurációs állománya lesz, amelynek a végére (a ?> jel elé) vegyük fel az alábbit:
$servers->newServer('ldap_pla');
$servers->setValue('server','name','LDAP Server');
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=javaforum,dc=hu'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','');
$servers->setValue('login','bind_pass','');
$servers->setValue('server','tls',false);
$servers->setValue('sasl','mech','GSSAPI');
$servers->setValue('sasl','realm','EXAMPLE.COM');
$servers->setValue('sasl','authz_id',null);
$servers->setValue('sasl','authz_id_regex','/^uid=([^,]+)(.+)/i');
$servers->setValue('sasl','authz_id_replacement','$1');
$servers->setValue('sasl','props',null);
$servers->setValue('appearance','password_hash','md5');
$servers->setValue('login','attr','dn');
$servers->setValue('login','fallback_dn',false);
$servers->setValue('server','read_only',false);
$servers->setValue('appearance','show_create',true);
$servers->setValue('auto_number','enable',true);
$servers->setValue('auto_number','mechanism','search');
$servers->setValue('auto_number','search_base',null);
$servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500));
$servers->setValue('auto_number','dn',null);
$servers->setValue('auto_number','pass',null);
$servers->setValue('login','anon_bind',true);
$servers->setValue('custom','pages_prefix','custom_');
$servers->setValue('unique','attrs',array('mail','uid','uidNumber'));
$servers->setValue('unique','dn',null);
$servers->setValue('unique','pass',null);
$servers->setValue('server','visible',true);
$servers->setValue('login','timeout',30);
$servers->setValue('server','branch_rename',false);
$servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime'));
$servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock'));
$servers->setValue('server','force_may',array('uidNumber','gidNumber','sambaSID'));
Ezek után a szerverünk alapértelmezett domain neve alatt elérhető lesz a PhPLdapAdmin felületete (természetesen belépés után):

Az OpenLDAP telepítésünk elkészült, dőljünk hátra és pihenjünk egy kicsit…
Mentés
Az LDAP mentése triviálisan egyszerű, az alábbi scriptre van szükségünk:
!/bin/bash
ldapsearch -x -b 'dc=javaforum,dc=hu' '(objectclass=*)' | bzip2 -c >/home/backup/ldap/full.ldif.bz2
Futtassuk le kézzel első körben, majd ellenőrizzük vissza az adatok:
# mkdir /home/backup/ldap
# vi /home/backup/ldap/ldap_backup.sh
# chmod +x /home/backup/ldap/ldap_backup.sh
# /home/backup/ldap/ldap_backup.sh
# ls -l /home/backup/ldap/full.ldif.bz2
-rw-r--r--. 1 root root 1720 jún 29 15.32 /home/backup/ldap/full.ldif.bz2
Ezek után hozzuk létre a `crontab -e` használatával az ütemezett futtatást:
MAILTO=root
36 15 * * * /home/backup/ldap/ldap_backup.sh
Majd ellenőrizzük vissza, hogy megtörténik-e a rendszeres mentés.