Форум проекта Pro-LDAP.ru
Общие вопросы по LDAP => Общий раздел => Тема начата: 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
-
Здравствуйте!
Дело в том, что есть ещё 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
Егор
-
Добрый день!
Егор, спасибо за оперативный ответ.
Я правильно понимаю, что по умолчанию в OpenLDAP все, что явно не ЗАПРЕЩЕНО является РАЗРЕШЕННЫМ? Т.е, если ACL не определены, то любой пользователь каталога имеет право выполнить любую операцию?
Заранее спасибо!
-
Я правильно понимаю, что по умолчанию в 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).
Егор