Child pages
  • OpenLDAP
Skip to end of metadata
Go to start of metadata

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:

/etc/openldap/slapd.d/cn\=config/olcDatabase\={2}bdb.ldif
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:

startup.ldif
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... (smile)

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

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):

/etc/httpd/conf.d/hu.javaforum.ldapadmin.conf
<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:

/usr/share/phpldapadmin/config/config.php
$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... (smile)

Mentés

Az LDAP mentése triviálisan egyszerű, az alábbi scriptre van szükségünk:

/home/backup/ldap/ldap_backup.sh
#!/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.

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels