Назад | Перейти на главную страницу

ACL OpenLDAP не работают

Перво-наперво, в настоящее время я работаю с OpenLDAP: slapd 2.4.36 на Fedora версии 19 (Schrödinger’s Cat).

Я только что установил openldap с помощью yum, и моя конфигурация следующая:

##### OpenLDAP Default configuration #####
#
##### OpenLDAP CORE CONFIGURATION #####
include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/nis.schema

pidfile         /var/lib/ldap/slapd.pid

loglevel trace

##### Default Schema #####

database mdb
directory /var/lib/ldap/
maxsize 1073741824

suffix "dc=domain,dc=tld"
rootdn "cn=root,dc=domain,dc=tld"
rootpw {SSHA}SECRETP@SSWORD


##### Default ACL #####
access to attrs=userpassword
        by self write
        by group.exact="cn=administrators,ou=builtin,ou=groups,dc=domain,dc=tld" write
        by anonymous auth
        by * none

Я запускаю свою службу OpenLDAP, используя:

/usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// -f /etc/openldap/slapd.conf

Как видите, это довольно простой ACL, цель которого - разрешить доступ к атрибуту userPassword определенной группе только для чтения, затем владельцу читать и писать анонимным пользователям, требующим авторизации, и отказывать в доступе всем остальным.

Проблема в следующем: даже при использовании действующего пользователя с правильным паролем мой ldapsearch заканчивается нулевой информацией, полученной из каталога, плюс у меня странный ответ в строке результата.

# search result
search: 2
result: 32 No such object

# numResponses: 1

вот запрос ldapsearch:

ldapsearch -H ldap.domain.tld -W -b dc=domain,dc=tld -s sub -D cn=user,ou=service,ou=employees,ou=users,dc=domain,dc=tld 

Я не указывал никаких фильтров, так как хочу проверить, правильно ли ldapsearch печатает только разрешенный атрибут.


@SvW вот что я поместил в свой slapd.conf согласно вашему примеру и документации OpenLDAP:

Я отредактировал свой slapd.conf со следующими правилами ACL, исключив group.exact для упрощения отладки:

access to *
    by self read
    by anonymous auth
    by * none

access to attrs=userpassword
    by self write
    by anonymous auth
    by * none

но я снова сталкиваюсь с

32 Нет ошибки такого объекта

когда я пробую следующие ldapsearches:

 ldapsearch -W -s sub -D cn=user,ou=service,ou=employees,ou=users,dc=domain,dc=tld -b dc=domain,dc=tld userpassword=*

или без фильтра:

 ldapsearch -W -s sub -D cn=user,ou=service,ou=employees,ou=users,dc=domain,dc=tld -b dc=domain,dc=tld

Для проверки попробуйте добавить

access to * by * read

после первая запись ACL.

Это по-прежнему должно ограничивать userpassword но явно разрешить вам читать все другие поля (я считаю, что OpenLDAP неявно добавляет to * by * none в противном случае см. раздел 8.3.4 документация).

Редактировать:

Ограничивает ли это поле пароля? Это не очень ясно из вашего комментария. Если нет, запомните ответ @Janne и проверьте, правильно ли написано userPassword правильно. Если он работает, вам придется начать с этого, чтобы добавить ограничения. Следующее не проверено, но должно работать (хотя оно может быть слишком ограничительным).

access to * 
    by self read 
    by group.exact="cn=administrators,ou=builtin,ou=groups,dc=domain,dc=tld" write
    by * none

Попробуйте с

access to attrs=userPassword

вместо вашего предыдущего

access to attrs=userpassword