Форум проекта Pro-LDAP.ru

Общие вопросы по LDAP => Общий раздел => Тема начата: syntetix от 20 Февраль 2018, 17:39:56

Название: Вопрос новичка про ACL.
Отправлено: syntetix от 20 Февраль 2018, 17:39:56
Добрый день.

Помогите пожалуйста разобраться с ACL.

При ACL приведенном ниже

access to attrs=objectClass,givenName,sn,uid,description,employeeType,telephoneNumber,mobile,homePostalAddress,homePhone,cn,displayName
       by group.exact="cn=hr,ou=groups,ou=lab,dc=lab,dc=local" read
       by * break

результат поиска посредством команды  ldapsearch -H ldap://ldap01 -x -D "uid=jdoe,ou=users,ou=lab,dc=lab,dc=local" -W -b "ou=users,ou=lab,dc=lab,dc=local"

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

Если в ACL список атрибутов заменить на *,

access to *
       by group.exact="cn=hr,ou=groups,ou=lab,dc=lab,dc=local" read
       by * break

то поиск выполняется корректно.

Пользователь от имени которого выполняется запрос является членом группы "hr".

К сожалению, пока не могу понять что я делаю не так.

Заранее спасибо за ответы.

Update:

В логе slapd при попытке выполнить запрос присутствует следующая информация:

access_allowed: search access to "ou=users,ou=lab,dc=lab,dc=local" "entry" requested
acl_get: [3] attr entry
acl_mask: access to entry "ou=users,ou=lab,dc=lab,dc=local", attr "entry" requested
acl_mask: to all values by "uid=jdoe,ou=users,ou=lab,dc=legolab,dc=local", (=0)
check a_group_pat: cn=itstaff,ou=groups,ou=lab,dc=lab,dc=local
bdb_entry_get: found entry: "cn=itstaff,ou=groups,ou=lab,dc=lab,dc=local"
check a_group_pat: cn=helpdesk,ou=groups,ou=lab,dc=lab,dc=local
bdb_entry_get: found entry: "cn=helpdesk,ou=groups,ou=lab,dc=lab,dc=local"
acl_mask: no more <who> clauses, returning =0 (stop)
slap_access_allowed: search access denied by =0
access_allowed: no more rules
conn=1003 op=1 SEARCH RESULT tag=101 err=32 nentries=0 text=
daemon: activity on 1 descriptor
daemon: activity on:

Складывается впечатление, что сервис slapd не обращается к группе "hr" (нет записи check a_group_pat для данной группы).

Группа точно создана, и членство в группе определено.

ldapsearch -H ldap://ldap01 -x -D "cn=rootuser,dc=lab,dc=local" -W -b "ou=groups,ou=lab,dc=lab,dc=local" "cn=hr"
# extended LDIF
#
# LDAPv3
# base <ou=groups,ou=lab,dc=lab,dc=local> with scope subtree
# filter: cn=hr
# requesting: ALL
#

# hr, groups, lab, lab.local
dn: cn=hr,ou=groups,ou=lab,dc=lab,dc=local
objectClass: groupOfNames
member: uid=jdoe,ou=users,ou=lab,dc=lab,dc=local
description: Group of HR deparmtnt members
cn: hr
Название: Re: Вопрос новичка про ACL.
Отправлено: egor от 21 Февраль 2018, 06:41:48
Здравствуйте!
Дело в том, что есть ещё 2 псевдоатрибута entry и children для контроля доступа к к самой записи и дочерним записям, соответственно. И если в ACL вы указываете конкретные атрибуты в конструкции access to attrs, то их тоже нужно указывать явно. Обычно определяется несколько ACL, и в последнем из них ограничивается доступ ко всему (access to *), тогда псевдоатрибуты entry и children попадают под действие этого ACL. Но поскольку у Вас это единственный ACL, то по умолчанию доступ ко всему, что не указано явно, запрещается.
Есть 2 варианта сделать так, как Вы хотите. Можно указать явно эти два псевдовтрибута в одном ACL:
access to attrs=entry,children,objectClass,givenName,sn,uid,description,employeeType,telephoneNumber,mobile,homePostalAddress,homePhone,cn,displayName
       by group.exact="cn=hr,ou=groups,ou=lab,dc=lab,dc=local" read
       by * none
Либо сделать два ACL:
access to attrs=objectClass,givenName,sn,uid,description,employeeType,telephoneNumber,mobile,homePostalAddress,homePhone,cn,displayName
       by group.exact="cn=hr,ou=groups,ou=lab,dc=lab,dc=local" read
       by * none

access to *
       by group.exact="cn=hr,ou=groups,ou=lab,dc=lab,dc=local" read
       by * none

Егор
Название: Re: Вопрос новичка про ACL.
Отправлено: syntetix от 21 Февраль 2018, 14:48:55
Добрый день!

Егор, спасибо за оперативный ответ.

Я правильно понимаю, что по умолчанию в OpenLDAP все, что явно не ЗАПРЕЩЕНО является РАЗРЕШЕННЫМ? Т.е, если ACL не определены, то любой пользователь каталога имеет право выполнить любую операцию?

Заранее спасибо!
Название: Re: Вопрос новичка про ACL.
Отправлено: egor от 22 Февраль 2018, 00:04:49
Я правильно понимаю, что по умолчанию в OpenLDAP все, что явно не ЗАПРЕЩЕНО является РАЗРЕШЕННЫМ? Т.е, если ACL не определены, то любой пользователь каталога имеет право выполнить любую операцию?

Нет, это не совсем так. Если не определено ни одного ACL, то всем предоставляется доступ на чтение
access to * by * readЕсли же определён хотя бы один ACL, то к концу определённых неявно ACL добавляется
access to * by * none
то есть любой доступ запрещается. Об этом можно почитать в man-странице slapd.access(5) (https://pro-ldap.ru/tr/man/slapd.access.5.html).

Егор