Автор Тема: [SOLVED] LFRS: "5.3.4 ACL — директивы access файла slapd.conf". Вопросы  (Прочитано 13925 раз)

Sdoba

  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Привет!

Большое спасибо за сайт, поистине титанический труд! Давно хотел нырнуть в 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
« Последнее редактирование: 07 Декабрь 2014, 19:58:27 от Sdoba »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте! Спасибо за тёплые слова =)

По поводу первого вопроса -- Вы не первый кто им задаётся =) . Я уже дискутировал как-то с одним человеком, правда по электронной почте, поэтому в форуме нет упоминаний. Да, действительно, эти ACL нужно разбивать на два, только я во второй части составного ACL вместо dn.one использовал dn.children. Что-то подобное можно посмотреть здесь . Исправить ошибку (может это не ошибка, а так задумано?) пока не могу -- будут расхождения с текстом оригинала книги.

Второй вопрос сложнее -- он менее очевиден. Пришлось даже воспроизвести конфигурацию и каталог на макете =) и воспользоваться 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.

Егор

Sdoba

  • Новичок
  • *
  • Сообщений: 20
    • Просмотр профиля
Большое спасибо за помощь!

Про недопустимость расхождения с оригиналом я так и понял. С поправками надо в Zytrax.