OpenLDAP: настройка двух баз на одном сервере и ограничение доступа к ним

Автор: | 21/02/2014
 

openldap_logoЗадача – создать несколько отдельных DITИнформационное дерево каталога (Data Information Tree) и разграничить доступ к ним.

В примере будет использоваться:

# cat /etc/redhat-release
CentOS release 6.5 (Final)

 

# rpm -qa | grep openldap
openldap-clients-2.4.23-34.el6_5.1.x86_64
openldap-servers-2.4.23-34.el6_5.1.x86_64
openldap-2.4.23-34.el6_5.1.x86_64

Сервер сконфигурирован на использование файла конфигурации /etc/openldap/slapd.conf, а не записи cn=config.

Для каждой базы создадим отдельный каталог:

# mkdir  /var/lib/ldap/db_1
# mkdir  /var/lib/ldap/db_2

Устанавливаем владельца:

# chown ldap:ldap /var/lib/ldap/db_1
# chown ldap:ldap /var/lib/ldap/db_2

Копиреум файлы настроек:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/db_1/DB_CONFIG
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/db_2/DB_CONFIG

Устанавливаем владельца:

# chown ldap:ldap /var/lib/ldap/db_1/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/db_2/DB_CONFIG

Останавливаем OpenLDAP сервер:

# service slapd stop
Stopping slapd:                                            [  OK  ]
# service slapd status
slapd is stopped

Генерируем хеши паролей для пользователей баз:

# slappasswd -s passwd1 -h {MD5}
{MD5}eeJiqB3RnUCuAI9061ntzg==
# slappasswd -s passwd2 -h {MD5}
{MD5}MJgloJUbPPHyXie2HO6CQw==

Редактируем файл /etc/openldap/slapd.conf и добавляем записи о новых базах:

#######################################################################
# BDB database definitions
#######################################################################

suffix          "dc=db_1"
checkpoint      1024 15
rootdn          "cn=root,dc=db_1"
rootpw          {MD5}80AY1UdLJTVLVKtRmmtwQw==
directory       /var/lib/ldap/db_1

access to dn.base="dc=db_1"
        by * read

database        bdb
suffix          "dc=db_2"
checkpoint      1024 15
rootdn          "cn=root,dc=db_2"
rootpw          {MD5}jwDprtHRLi5NeV7uxaMIdA==
directory       /var/lib/ldap/db_2

access to dn.base="dc=db_2"
        by * read

Сохраняем, выходим и проверяем корректность файла конфигурации:

# slaptest -u
config file testing succeeded
# service slapd start
Starting slapd:                                            [  OK  ]
# service slapd status
slapd (pid  27457) is running...

Проверим созданные DIT-ы:

# ldapsearch -x -s base -b "" + | grep naming
namingContexts: dc=db_1
namingContexts: dc=db_2

Готово.

Кратко – о назначении прав доступа. В примере выше мы разделили права на доступ к разным DIT для разных rootdn – писать в каталоги друг-друга они не могут, но могут читать (при этом для “своего” дерева у каждого пользователя есть полный доступ).

Давайте посмотрим как это выглядит.

Выполним поиск в базе db_1 от пользователя cn=root,dc=db_1:

# ldapsearch -x -D "cn=root,dc=db_1" -W -b "dc=db_1" "o=db_1"
Enter LDAP Password:
....
# db_1
dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_1

И поищем запись под этим же пользователем – но во второй базе:

# ldapsearch -x -D "cn=root,dc=db_1" -W -b "dc=db_2" "o=db_2"
Enter LDAP Password:
...
# db_2
dn: dc=db_2
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_2
o: db_2

Поиск работает для одного пользователя в обеих базах.

Теперь – попробуем отредактировать какую-то запись с помощью ldapmodify:

# ldapmodify -x -W -D "cn=root,dc=db_1"
Enter LDAP Password:
dn: dc=db_1
changetype: modify
replace: o
o: db_modified
modifying entry "dc=db_1"
 # ldapsearch -x -D "cn=root,dc=db_1" -W -b "dc=db_1" "o=db_modified"
Enter LDAP Password:
...
# db_1
dn: dc=db_1
objectClass: dcObject
objectClass: organization
objectClass: top
dc: db_1
o: db_modified

ОК, в “своей” базе мы отредактировали запись.

Попробуем в “чужой”:

# ldapmodify -x -W -D "cn=root,dc=db_1"
Enter LDAP Password:
dn: dc=db_2
changetype: modify
replace: o
o: db_modified
modifying entry "dc=db_2"
ldap_modify: Insufficient access (50)

Что и требовалось.

Ссылки по теме:

http://www.zytrax.com
http://www.linuxtopia.org
http://www.ghacks.net