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

Пользователь, прошедший аутентификацию LDAP (slapd), не может изменять себя

Я новичок в LDAP и, вероятно, совершаю действительно глупую ошибку, так что, надеюсь, кто-нибудь сможет указать мне правильное направление. Я запускаю slapd из openldap 2.4.23 под Linux. Проблема, с которой я столкнулся, заключается в том, что из учетной записи управления, которую я установил в slapd.conf (cn = Manager, dc = example, dc = com), я могу без проблем установить пароль конечного пользователя:

# ldappasswd -D 'cn=Manager,dc=example,dc=com' -W -S 'uid=tsuraan,ou=People,dc=example,dc=com'

Однако с точки зрения конечного пользователя я могу выполнять поиск и тому подобное, но я не могу изменить пароль:

$ ldapsearch -x -D "uid=tsuraan,ou=People,dc=example,dc=com" -W  
Enter LDAP Password:
<results>
$ ldappasswd -D 'uid=tsuraan,ou=People,dc=example,dc=com' -W -S 'uid=tsuraan,ou=People,dc=example,dc=com'
New password: 
Re-enter new password: 
Enter LDAP Password: 
Result: Insufficient access (50)

Я также пробовал использовать ldapmodify для прямого изменения атрибута userPassword, и он дает то же сообщение «Недостаточный доступ» (50). Мой раздел ACL slapd выглядит так:

access to *
    by dn="uid=root,ou=People,dc=example,dc=com" write
    by users read
    by self write
    by anonymous auth

access to attrs=userPassword,gecos,description,loginShell
    by self write

access to attrs="userPassword"
    by dn="uid=root,ou=People,dc=example,dc=com" write
    by anonymous auth
    by self write
    by * none

И у меня есть пользователь без полномочий root, чей LDIF выглядит так:

dn: uid=tsuraan,ou=People,dc=example,dc=com
uid: tsuraan
cn: tsuraan
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {crypt}x
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/tsuraan

Сегодня Google не любит меня, и я не понимаю, почему мой пользователь не может писать на свой собственный LDAP-узел, учитывая, что у меня везде есть «самопишущий», так что, надеюсь, кто-нибудь сможет мне помочь.

Lists  of  access  directives are evaluated in the order they appear in
slapd.conf.  When a <what> clause matches the  datum  whose  access  is
being evaluated, its <who> clause list is checked.  When a <who> clause
matches the accessor's properties, its <access> and  <control>  clauses
are evaluated.  Access control checking stops at the first match of the
<what> and <who> clause, unless otherwise  dictated  by  the  <control>
clause.

Первое совпадение <what> и <who> для попытки смены пароля:

access to *
   by users read

Если вы переместите предложение «доступ к *» в конец списка, все должно работать нормально. Или просто поменяйте местами «читают пользователи» и «самостоятельно пишут».

ACL - это самая сложная часть конфигурации OpenLDAP, поэтому прочтите slapd.access(5) внимательно и убедитесь, что вы полностью поняли, как работают ACL, прежде чем писать что-нибудь нетривиальное.