2

Я настраивал сервер 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

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

1 ответ1

0

Допустим, я добавил 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?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .