OpenLDAP - пользователь не может войти в систему после изменения правил ACL

Я играю с серверами OpenLDAP с репликацией, и мне нужно было установить соответствующие ACL, чтобы дать пользователю репликации возможность читать все на исходном хосте.

После прочтения этого В статье был создан следующий набор правил:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

Я хотел достичь следующего:

  1. Администратор может все, без ограничений
  2. Пользователь репликации может читать все
  3. Пользователи могут изменять свои пароли
  4. Любой доступ к каталогу возможен только для зарегистрированных пользователей, без анонимного доступа.

После установки указанных выше списков ACL для сервера, пользователь репликации не может логин вообще. Я не понимаю, почему это происходит, DN пользователя репликации правильный и, насколько я знаю, он должен совпадать ...

Журналы сервера после попытки входа в систему:

slapd[3475]: => access_allowed: result not in cache (userPassword)
slapd[3475]: => access_allowed: auth access to "uid=rpuser,dc=example,dc=com" "userPassword" requested
slapd[3475]: => acl_get: [1] attr userPassword
slapd[3475]: => acl_mask: access to entry "uid=rpuser,dc=example,dc=com", attr "userPassword" requested
slapd[3475]: => acl_mask: to value by "", (=0)
slapd[3475]: <= check a_dn_pat: cn=admin,dc=example,dc=com
slapd[3475]: <= acl_mask: no more <who> clauses, returning =0 (stop)
slapd[3475]: => slap_access_allowed: auth access denied by =0
slapd[3475]: => access_allowed: no more rules

Если я правильно понимаю, проверяется только первый ACL?

0
задан 5 September 2018 в 22:33
1 ответ

Эти ACL не тестируются, но должны работать:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage by * break
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read by * break
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

Вам понадобится по * break в первых двух правилах, поэтому, если нет совпадений в конкретных по пункту проверяется следующее правило. Вам не нужно по * break в attrs = userPassword или attrs = shadowLastChange - для пользователей не должно быть возврата к к * прочтите .

4
ответ дан 4 December 2019 в 11:42

Теги

Похожие вопросы