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:
# cd /etc/httpd/conf.d/ # mv phpldapadmin.conf hu.javaforum.ldapadmin.conf
Majd szerkesszük a tartalmát (előzmény: Apache Httpd):
<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 # # bzless /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.