Перво-наперво, в настоящее время я работаю с 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