Форум проекта Pro-LDAP.ru
Обсуждение материалов проекта Pro-LDAP.ru => Обсуждение переводов и статей => Тема начата: Sdoba от 20 Сентябрь 2014, 22:56:41
-
Привет!
Большое спасибо за сайт, поистине титанический труд! Давно хотел нырнуть в OpenLDAP и с опаской на него поглядывал. А тут столько всего! Супер!
А теперь мольба о помощи :D
Указанный (в заголовке) раздел книги "для ракетчиков" не позволил мне добиться политики доступа из примера.
Пришлось внести пару изменений.
Вопрос №1: "Адекватны ли эти изменения, или я что-то неправильно понял?"
Изменены ACL7 и ACL8A (удалю исходные комментарии для краткости):
# ACL1
access to attrs=userpassword
by self write
by anonymous auth
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by * none
# ACL2
access to dn.regex="^ou=addressbook,cn=([^,]+),ou=people,dc=example,dc=com$" attrs=entry
by dn.exact,expand="cn=$1,ou=people,dc=example,dc=com" read
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by users none
# ACL3
access to dn.regex="cn=[^,]+,ou=people,dc=example,dc=com$" attrs=children
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by users none break
# ACL4
access to dn.regex="ou=addressbook,cn=([^,]+),ou=people,dc=example,dc=com$" attrs=children
by dn.exact,expand="cn=$1,ou=people,dc=example,dc=com" write
by users none
# ACL6A
access to dn.regex="ou=addressbook,cn=([^,]+),ou=people,dc=example,dc=com$" attrs=entry,@inetorgperson
by dn.exact,expand="cn=$1,ou=people,dc=example,dc=com" write
by users none
# ACL7
# Вместо такого ACL7:
#access to dn.one="ou=customers,dc=example,dc=com" attrs=children
# by group.exact="cn=salespeople,ou=groups,dc=example,dc=com" write
# by users read
# Пришлось сделать два:
access to dn="ou=customers,dc=example,dc=com" attrs=children
by group.exact="cn=salespeople,ou=groups,dc=example,dc=com" write
by users read
access to dn.one="ou=customers,dc=example,dc=com" attrs=entry
by group.exact="cn=salespeople,ou=groups,dc=example,dc=com" write
by users read
# ACL8
access to attrs=carlicense,homepostaladdress,homephone
by self write
by group.exact="cn=hrpeople,ou=groups,dc=example,dc=com" write
by * none
# ACL8A
# Вместо такого ACL8A:
#access to dn.one="ou=equipment,dc=example,dc=com"
# by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
# by users read
# by * none
# Пришлось сделать тоже два:
access to dn="ou=equipment,dc=example,dc=com" attrs=children
by group="cn=itpeople,ou=groups,dc=example,dc=com" write
by users read
by * none
access to dn.one="ou=equipment,dc=example,dc=com" attrs=entry
by group.exact="cn=itpeople,ou=groups,dc=example,dc=com" write
by users read
by * none
# ACL9
access to *
by self write
by group.exact="cn=hrpeople,ou=groups,dc=example,dc=com" write
by users read
by * none
Без указанных изменений salespeople и itpeople в соответствующие ветки customers и equipment писать не могут.
Вопрос №2 (и самый для меня интересный):
"Группа itpeople, согласно политике, должна иметь возможность создавать запись addressbook для представителей ветки people.
И она это успешно делает. Но при этом просматривать саму эту запись, entry (не её children), группа itpeople не может.
Пожалуйста разъясните, почему. Я не вижу места в ACL, которое не позволяет это делать."
Несколько часов курю документацию, но голова уже в тумане.
Версия OpenLDAP: 2.4.31, Debian
-
Здравствуйте! Спасибо за тёплые слова =)
По поводу первого вопроса -- Вы не первый кто им задаётся =) . Я уже дискутировал как-то с одним человеком, правда по электронной почте, поэтому в форуме нет упоминаний. Да, действительно, эти ACL нужно разбивать на два, только я во второй части составного ACL вместо dn.one использовал dn.children. Что-то подобное можно посмотреть здесь (http://pro-ldap.ru/forum/index.php?topic=54.msg299#msg299) . Исправить ошибку (может это не ошибка, а так задумано?) пока не могу -- будут расхождения с текстом оригинала книги.
Второй вопрос сложнее -- он менее очевиден. Пришлось даже воспроизвести конфигурацию и каталог на макете =) и воспользоваться slapacl. Результаты такие:
# slapacl -f /opt/openldap-tests/slapd.conf -b 'ou=addressbook,cn=Robert Smith,ou=people,dc=example,dc=com' -D 'cn=Robert Smith,ou=people,dc=example,dc=com'
authcDN: "cn=robert smith,ou=people,dc=example,dc=com"
entry: read(=rscxd)
children: write(=wrscxd)
objectClass=organizationalUnit: write(=wrscxd)
ou=addressbook: write(=wrscxd)
description=Personal Address Book: write(=wrscxd)
structuralObjectClass=organizationalUnit: write(=wrscxd)
entryUUID=cd9a0ed2-7846-469f-96f2-5f25fd0f5891: write(=wrscxd)
creatorsName=cn=jimbob,dc=example,dc=com: write(=wrscxd)
createTimestamp=20140922021302Z: write(=wrscxd)
entryCSN=20140922021302.895141Z#000000#000#000000: write(=wrscxd)
modifiersName=cn=jimbob,dc=example,dc=com: write(=wrscxd)
modifyTimestamp=20140922021302Z: write(=wrscxd)
# slapacl -f /opt/openldap-tests/slapd.conf -b 'ou=addressbook,cn=Robert Smith,ou=people,dc=example,dc=com' -D 'cn=William Smith,ou=people,dc=example,dc=com'
authcDN: "cn=william smith,ou=people,dc=example,dc=com"
entry: write(=wrscxd)
children: write(=wrscxd)
objectClass=organizationalUnit: none(=0)
ou=addressbook: none(=0)
description=Personal Address Book: none(=0)
structuralObjectClass=organizationalUnit: read(=rscxd)
entryUUID=cd9a0ed2-7846-469f-96f2-5f25fd0f5891: read(=rscxd)
creatorsName=cn=jimbob,dc=example,dc=com: read(=rscxd)
createTimestamp=20140922021302Z: read(=rscxd)
entryCSN=20140922021302.895141Z#000000#000#000000: read(=rscxd)
modifiersName=cn=jimbob,dc=example,dc=com: read(=rscxd)
modifyTimestamp=20140922021302Z: read(=rscxd)
Как видите у Вильяма (запись я добавил) из itpeolpe нет прав на чтение атрибутов objectClass, ou и description, а у Роберта есть. Тут дело в ACL 6A, запрещающего всем кроме вышестоящей записи (то есть Роберта) делать что-либо с атрибутами из класса inetOrgPerson. Поскольку ou составляет RDN, запись, судя по всему, не выводится при поиске. Добавьте группе itpeople права на чтение и увидете addressbook.
Егор
-
Большое спасибо за помощь!
Про недопустимость расхождения с оригиналом я так и понял. С поправками надо в Zytrax.