Борьба с конфигурацией OpenLDAP

435
Jsncrdnl

Я настраивал сервер LDAP на экземпляре Linux, используя AWS EC2. До сих пор я успешно настраивал LDAP и phpLDAPadmin для совместной работы.

Я создал пользователей и группы "Организационные единицы". Я добавил пользователей и группы к этим "OU". Теперь я хочу предоставить общий доступ к определенным частям моего дерева LDAP членам группы «Пользователи». Это то, что я не смог настроить до сих пор ...

Мое дерево LDAP выглядит так:

+--> dc=www,dc=website,dc=com (3) ---> cn=admin +--> ou=groups (4) | ---> cn=admin_users | ---> cn=app1_users | ---> cn=app2_users | ---> cn=basic_users +--> ou=users (3) | ---> cn=user1 | ---> cn=user2 | ---> cn=user3 

Допустим, я добавил user1 + user2 в список "memberUid" из "app1_users" и user2 + user3 в список "memberUid" из "app2_users".

Я хочу:

  • cn = администратор имеет полные права / доступ к дереву
  • app1_users может подключаться (к phpLDAPadmin) и добавлять новых участников в саму группу
  • то же самое для пользователей app2_users

Подключенный пользователь (на phpLDAPadmin) должен видеть только дерево (и дочерние поддеревья), частью которого он является.

Вот ACI, который я пытался (но чьи были obsiouvly не работают):

access to attrs=shadowLastChange by self write by dn="cn=admin,dc=www,dc=website,dc=com" write by * read  access to attrs=userPassword by self write by dn="cn=admin,dc=www,dc=website,dc=com" write by anonymous auth by * none  access to dn.base="" by * read  access to dn.subtree="cn=app1_users,ou=groups,dc=www,dc=website,dc=com" by group.base="cn=app1_users,dc=www,dc=website,dc=com" write by dn.base="cn=admin,dc=www,dc=website,dc=com" write  by * none  access to dn.subtree="cn=app2_users,ou=groups,dc=www,dc=website,dc=com" by group.base="cn=app2_users,dc=www,dc=website,dc=com" write by dn.base="cn=admin,dc=www,dc=website,dc=com" write  by * none  access to * by self write by dn="cn=admin,dc=www,dc=website,dc=com" write by * read 

Что-то не так с моей конфигурацией?

2

1 ответ на вопрос

0
Michael Ströder

Допустим, я добавил user1 + user2 в список "memberUid" из "app1_users" и user2 + user3 в список "memberUid" из "app2_users".

Это не работает с posixGroup записей с memberUid как атрибут членства. memberUid содержит только краткое имя пользователя, а не DN.

Поскольку slapd.access (5) четко заявляет, что групповые ACL-списки работают только с атрибутами-членами, содержащими полное различающееся имя (DN) каждой записи члена:

 The statement group=<group> means that access is granted to requests whose DN is listed in the group entry whose DN is given by <group>. The optional parameters <objectclass> and <attrname> define the objectClass and the member attributeType of the group entry. The defaults are groupOfNames and member, respectively. 

Некоторые заметки о ваших ACL:

  • Опустите ACL для атрибута shadowLastChange, потому что карта теней LDAP является неработающей концепцией. И если вы используете карты теней, ваш ACL (возможно, копирование и вставка из некоторых практических рекомендаций) позволит пользователю обойти истечение срока действия теневого пароля.
  • Не предоставляйте неявную привилегию на чтение для userPassword с помощью инклюзивного доступа на запись. =wВместо этого используйте привилегию только для записи .

Смотрите также мой ответ на этот вопрос на serverfault :

Установите ACL в OpenLDAP, чтобы пользователь мог найти свою собственную запись из отфильтрованного поддерева

И прежде чем идти по этому пути самостоятельно, я бы рекомендовал рассмотреть возможность использования одной из систем, упомянутых в других ответах:

Централизованный сервер NSS для Linux

Как разрешить пользователям и / или группам доступ только к определенным клиентским компьютерам, которые подключены к серверу openldap?

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