Автор Тема: Правильное распределение по группам пользователей разных отделов  (Прочитано 16492 раз)

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Егор, здравствуйте.

Помогите прояснить, как лучше заточить openLDAP под такую структуру организации:

Есть организация. В ней три уровня вложенности: департамент (их два), в каждом департаменте по три отдела, в отделах по несколько рабочих групп, (где-то две, где-то пять). В каждом из юнитов (департаменте, отделе, рабочей группе) есть руководство (1-3 человека) и исполнители (все остальные). Это отдельные группы, как-то вложенные в юнитов.

И руководитель рабочей группы является рядовым сотрудником отдела. Т.е. древовидная структура подходит под структуру лдапа.

  Уровень департамента                         Д е п а р т а м е н т 1                                                         Д е п а р т а м е н т 2
                                             /            |           \                                                       /           |         \
 Уровень отдела/отделов                 Отдел1        Отдел2       Отдел3                                                 Отдел1     Отдел2      Отдел3
                     А3{         A4 {   Рук-тель1.1  Рук-тель1.2    Рук-тель1.3}                                     Рук-тель2.1   Рук-тель2.2  Рук-тель2.3  }
                                        /       \                      |                                                 |
Уровень рабочих групп            Рабочая         Рабочая            Рабочая                                          Рабочая
                                 группа1:        группа2:           группа3:                                         группа1
  A0{       А1{       А2{   Руководитель1.1.1    Рук-ль1.1.2 }     Рук-ль1.3.1   }}                                  Рук-тель2.1.1                                        }
                              Исполнитель1        Исп-ль1             Исп-ль1
                              Исполнитель2        Исп-ль2             Исп-ль2


Вопрос вот в чем. Нужны группы, объединяющие руководителей рабочих групп как по отделам, так и по департаментам. И группы, объединяющие руководителей отделов как по отделам, так и по департаментам.

Планирую это для xmpp (и, скорее всего, для других сервисов), для создания разных комнат. Может, на примере будет наглядней.

Группа А0 - объединяет всех руководителей рабочих групп обоих департаментов
Группа А1 - объединяет руководителей рабочих групп всех отделов одного департамента.
Группа А2  - объединяет руководителей рабочих групп одного отдела.

Например. Поступило сообщение в департамент1. "Принять в работу и донести до руководителей рабочих групп следующее...". Все руководители рабочих групп всех отделов одного департамента в одной группе, и получают это сообщение. (А1)
Далее, следует поправка для отдела1, и сообщение отправляется группе А2. Получают его руководитель1.1.1 и руководитель1.1.2 и

Аналогично, на уровне отделов.
Группа А3 - общая группа руководителей отделов обоих департаментов.
Группа А4 - руководители отделов одного департамента

Собственно, это структура. Как-то это распределение по группам в лдап упаковать можно?
« Последнее редактирование: 12 Июль 2017, 20:58:46 от manik207 »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна! Отличная псевдографика =) .

Группы для такой структуры реализовать, в принципе, не проблема, как статические, так и динамические. Главный вопрос тут даже не в группах, а в том, что из каталога LDAP xmpp-сервер рассматривает в качестве "комнаты"? То есть должна ли эта быть некая запись с определёнными атрибутами, или значения каких-то атрибутов, полученные списком при выполнении поискового запроса, или что-то ещё. В общем, нужно понять, что хочет увидеть xmpp-сервер, и сформировать нужную ему структуру. Надеюсь, я понятно объясняю =) ?

Для начала, какой xmpp-сервер Вы планируете использовать?

Егор

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Егор, здравствуйте! Спасибо, рисовала я долго, результат мне тоже понравился))
Сейчас пытаюсь настроить это на openfire, хотя, если ejabberd или какой-то другой будет лучше подходить под структуру, можно освоить и его.

В каком виде openfire запрашивает группы, я не знаю. У меня получилось разрешить вход пользователям группе cn=xmpp,dc=domen,dc=ru и через фильтр добавить пользователей группы cn=A5,cn=xmpp,dc=domen,dc=ru. В настройках сервера это выглядит как поиск по группам
(&(ObjectClass=GroupOfNames)(|(cn=xmpp)(cn=A5))) Это пока всё, что мне понятно.

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
О, теперь стало понятней больше! Сделала в лдапе (он тестовый, если что - поправлю))) такую схему:
          cn=xmpp
           |---------------cn=D
           |               |---------cn=D1
           |               |           |--------u01
           |               |---------cn=D2
           |                           |--------u02
           |---------------cn=O
                           |---------cn=O1
                           |           |--------u03
                           |---------cn=O2
                                       |--------u04
Группы подгружаются в опенфайр из лдапа, только в cn=O приходится вручную добавлять u03 и u04, как и в cn=D всех вложенных пользователей. Можно как-то сделать чтобы пользователи O1 и О2 были и пользователями группы О? Членство на основе memberOf
« Последнее редактирование: 13 Июль 2017, 20:56:39 от manik207 »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна! Пришёл мой черёд мучиться с псевдографикой.

Начнём с того, что в документации openfire я не нашёл прямой зависимости "Группа_LDAP"=="XMPP-комната", но будем надеяться,что это так. Как я понял, стандартные группы на объектном классе groupOfNames приветствуются, тогда можно создать совершенно любую структуру.

Если Вы хотите всё разложить по полочкам, то можно придумать такую монструозную структуру:

ou=People # раздел
|---ou=Dep1 # подраздел
| |---ou=SubDep11 # подраздел
| | |---ou=WorkGroup111 # подраздел
| | | |---uid=wg_111_boss # учётная запись
| | | |---uid=wg_111_user1 # учётная запись
| | | |---uid=wg_111_user2 # учётная запись
| | |
| | |---ou=WorkGroup112 # подраздел
| | | |---uid=wg_112_boss # учётная запись
| | | |---uid=wg_112_user1 # учётная запись
| | |
| | |---uid=sub_dep_11_boss # учётная запись
| |
| |---ou=SubDep12 # подраздел
| | |---uid=sub_dep_12_boss # учётная запись
| |
| |---ou=SubDep13 # подраздел
| | |---ou=WorkGroup131 # подраздел
| | | |---uid=wg_131_boss # учётная запись
| | | |---uid=wg_131_user1 # учётная запись
| | |
| | |---uid=sub_dep_13_boss # учётная запись
| |
| |---uid=dep_1_boss # учётная запись
|
|---ou=Dep2 # подраздел
|---ou=SubDep21 # подраздел
| |---ou=WorkGroup211 # подраздел
| | |---uid=wg_211_boss # учётная запись
| | |---uid=wg_211_user1 # учётная запись
| | |---uid=wg_211_user2 # учётная запись
| |
| |---uid=sub_dep_21_boss # учётная запись
|
|---ou=SubDep22 # подраздел
| |---uid=sub_dep_22_boss # учётная запись
|
|---ou=SubDep23 # подраздел
| |---uid=sub_dep_23_boss # учётная запись
|
|---uid=dep_2_boss # учётная запись

ou=Groups
|---cn=DepBosses
| member: uid=dep_1_boss,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=dep_2_boss,ou=Dep2,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_Dep1
| member: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_12_boss,ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_13_boss,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_Dep2
| member: uid=sub_dep_21_boss,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_22_boss,ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_23_boss,ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_All
| member: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_12_boss,ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_13_boss,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_21_boss,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_22_boss,ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_23_boss,ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_11
| member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_13
| member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_Dep1
| member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
| member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_21
| member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_Dep2
| member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_All
member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru

Можно придумать структуру попроще, эффект будет, в принципе, тот же, но управлять всем этим нагромождением будет легче:
ou=People # раздел
|---uid=dep_1_boss # учётная запись
|---uid=sub_dep_11_boss # учётная запись
|---uid=wg_111_boss # учётная запись
|---uid=wg_111_user1 # учётная запись
|---uid=wg_111_user2 # учётная запись
|---uid=wg_112_boss # учётная запись
|---uid=wg_112_user1 # учётная запись
|---uid=sub_dep_12_boss # учётная запись
|---uid=sub_dep_13_boss # учётная запись
|---uid=wg_131_boss # учётная запись
|---uid=wg_131_user1 # учётная запись
|---uid=dep_2_boss # учётная запись
|---uid=sub_dep_21_boss # учётная запись
|---uid=wg_211_boss # учётная запись
|---uid=wg_211_user1 # учётная запись
|---uid=wg_211_user2 # учётная запись
|---uid=sub_dep_22_boss # учётная запись
|---uid=sub_dep_23_boss # учётная запись

ou=Groups
|---cn=DepBosses
| member: uid=dep_1_boss,ou=People,dc=mycompany,dc=ru
| member: uid=dep_2_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_Dep1
| member: uid=sub_dep_11_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_12_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_13_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_Dep2
| member: uid=sub_dep_21_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_22_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_23_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=SubDepBosses_All
| member: uid=sub_dep_11_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_12_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_13_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_21_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_22_boss,ou=People,dc=mycompany,dc=ru
| member: uid=sub_dep_23_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_11
| member: uid=wg_111_boss,ou=People,dc=mycompany,dc=ru
| member: uid=wg_112_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_13
| member: uid=wg_131_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_Dep1
| member: uid=wg_111_boss,ou=People,dc=mycompany,dc=ru
| member: uid=wg_112_boss,ou=People,dc=mycompany,dc=ru
| member: uid=wg_131_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_21
| member: uid=wg_211_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_Dep2
| member: uid=wg_211_boss,ou=People,dc=mycompany,dc=ru
|
|---cn=WGBosses_All
member: uid=wg_111_boss,ou=People,dc=mycompany,dc=ru
member: uid=wg_112_boss,ou=People,dc=mycompany,dc=ru
member: uid=wg_131_boss,ou=People,dc=mycompany,dc=ru
member: uid=wg_211_boss,ou=People,dc=mycompany,dc=ru

Обе они отражают ту задачу, которую Вы хотите решить. Я сторонник простоты, поэтому мне по душе второй вариант.

Егор

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
И Вам спасибо за псевдографику, всё достаточно наглядно.

Вопросы возникли следующие:
1. Как я поняла, первый от второго варианта отличается только структурой ou=People (наличием подразделов). Ou=Groups имеет одноранговую структуру, наличие подгрупп в соответствии со структурой департаментов мы не делаем, потому что ... (вопрос, а, кстати, почему? LDAP не воспринимает многовложенность групп?)

2. Вся эта структура делается только вручную? Или существуют какие-то средства автоматизации? Например, user, помещенный в определенный ou, автоматически определяется в определенной Groups (а то легко запутаться). Сейчас пользователей приходится вести в Экселе, из которого я и ввожу их в LDAP. Это позволяет хоть немного избежать путаницы, особенно при многократном дублировании записей в разных системах. Подскажите, чем пользуетесь Вы для учета изменений, которые могут приходить от кадровика - по электронной почте, от директора - устно, от начальников департаментов - по той же аське, в стиле "этого надо добавить, этого - переместить, этого - заблокировать" (раньше бы первый ваш пример подошел бы лучше)

« Последнее редактирование: 15 Июль 2017, 12:07:23 от manik207 »

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна!
1. Как я поняла, первый от второго варианта отличается только структурой ou=People (наличием подразделов). Ou=Groups имеет одноранговую структуру, наличие подгрупп в соответствии со структурой департаментов мы не делаем, потому что ... (вопрос, а, кстати, почему? LDAP не воспринимает многовложенность групп?)
Дело в том, Анна, что LDAP вообще ничего не воспринимает, не додумывает и т.п., он только хранит Ваши данные. А воспринимают и додумывают те приложения, которые обращаются в LDAP за данными: в каком виде они готовы воспринять, так они и будут интерпретировать полученные из каталога данные.

И ещё один важный момент. Не стоит думать, что иерархическая структура представления данных говорит о вложенности чего-то одного во что-то другое. Каждая запись LDAP -- это автономный объект, НИКАК НЕ СВЯЗАННЫЙ с другими объектами. Иерархичность используется только в именовании записей, и всё. То есть, если у Вас две записи группы и одна будет дочерней записью по отношению к другой, то это не говорит о том, что члены дочерней группы будут входить в родительскую. Это будут две независимые друг от друга группы со своими членами. Так что будете ли Вы выстраивать некую иерархию групп, или оставите их на одном уровне иерархии -- не играет ровно никакой роли, они будут найдены поисковым запросом и обработаны одинаково. То же самое, кстати, касается и иерархии записей пользователей. Как Вам удобно, так и организуйте каталог.

2. Вся эта структура делается только вручную? Или существуют какие-то средства автоматизации? Например, user, помещенный в определенный ou, автоматически определяется в определенной Groups (а то легко запутаться). Сейчас пользователей приходится вести в Экселе, из которого я и ввожу их в LDAP. Это позволяет хоть немного избежать путаницы, особенно при многократном дублировании записей в разных системах. Подскажите, чем пользуетесь Вы для учета изменений, которые могут приходить от кадровика - по электронной почте, от директора - устно, от начальников департаментов - по той же аське, в стиле "этого надо добавить, этого - переместить, этого - заблокировать" (раньше бы первый ваш пример подошел бы лучше)
Во-первых, каталог проектируется сразу под все сервисы, которыми планирует пользоваться организация. Зачем что-то где-то дублировать, когда есть возможность использовать одни и те же учётки, а доступ к сервисам предоставлять (или не предоставлять) на основе каких-либо признаков этих учёток?

Во-вторых, если у Вас действительно часто меняется штатная структура, то есть смысл настроить динамические группы. Сделать в учётках начальников какой-нибудь признак, что они начальники, например (с понравившейся Вам сложной структурой):
dn: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_11_boss
cn: Иванов Иван
sn: Иванов
ou: Bosses

В данном случае признаком принадлежности к руководителям будет атрибут ou: Bosses. Если он будет выставлен в учётках всех начальников, то динамические группы построить проще простого:
dn: cn=DepBosses,ou=Groups,dc=example,dc=com
objectclass: groupOfURLs
cn: DepBosses
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??one?(ou=Bosses)

dn: cn=SubDepBosses_Dep1,ou=Groups,dc=example,dc=com
objectclass: groupOfURLs
cn: SubDepBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=mycompany,dc=ru??one?(ou=Bosses)

dn: cn=cn=WGBosses_11,ou=Groups,dc=example,dc=com
objectclass: groupOfURLs
cn: WGBosses_11
memberURL: ldap:///ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru??one?(ou=Bosses)

...

Аналогично можно построить динамические группы и для "плоской" структуры ou=People, введя дополнительный признак принадлежности к подразделению:
dn: cn=cn=WGBosses_11,ou=Groups,dc=example,dc=com
objectclass: groupOfURLs
cn: WGBosses_11
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(|(ou=ou=WorkGroup111)(ou=WorkGroup112)))

В общем, всё в Ваших руках. Думайте и реализуйте.

Егор

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Про динамические группы не знала, что такое бывает и как правильно спросить, чтобы получить ответ. Спасибо Вам!

Не совсем поняла по атрибут OU. Любой атрибут из доступных можно добавлять пользователям или только “ou”? И необходимо ли создавать эти самые ou (в примере ou=Bosses), или это просто идентификатор пользователя для фильтра?

С динамическими группами начинаю разбираться, и openfire не понимает, какие пользователи подгружаются в динамическую группу.
Подгрузила схему dyngroup, проверяю – схема загружена в OpenLDAP:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: cn={4}dyngroup,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config
Создала динамическую группу, членов которой будет искать openfire, группа выглядит так:
dn: cn=dinamic,ou=Group,dc=domen,dc=ru
cn: dinamic
memberurl: ldap:///ou=People,dc=domen,dc=ru??one?(ou=Bosses)
objectclass: groupOfURLs
Двум пользователям добавила атрибут ou=Bosses
dn: uid=t1,ou=People,dc=domen,dc=ru
cn:: 0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GMINC/0LXRgNCy0YvQuQ==
objectclass: inetOrgPerson
objectclass: top
ou: Bosses
В настройке openfire в запросе поиска пользователей, вместо ранее работавшего фильтра (&(uid={0})(memberOf=cn=xmpp,ou=Group,dc=domen,dc=ru)) ввожу поиск членов по динамической группе, заменив основной параметр – выдает ошибку.
Опробованы варианты:(&(uid={0})(memberOf=cn=dynamic,ou=Group,dc=domen,dc=ru))
(&(uid={0})(memberURL=cn=dinamic,ou=Group,dc=domen,dc=ru))
(&(uid={0})(memberURL=ldap:///ou=People,dc=domen,dc=ru??one?(ou=Bosses)))

Или я запрос членов группы не так делаю, или openfire не воспринимает найденных пользователей...

Подскажите, как-то можно проверить из командной строки, что пользователи из динамической группы вообще ищутся?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна! Извините, что не сразу ответил.

Чтобы работали динамические группы, нужно не только схему подключить, но и добавить к базе наложение dynlist. Понятное объяснение по динамическим группам в учебнике OLAG24.

Я тут сделал тестовую конфигурацию по мотивам той структуры, которую мы обсуждали. slapd.conf:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/dyngroup.schema

moduleload back_mdb.so
moduleload dynlist.so

database mdb
directory /data/openldap-experiments/2017-07-19-dynlist-groups/
suffix dc=mycompany,dc=ru
rootDN cn=manager,dc=mycompany,dc=ru
rootPW test

overlay dynlist
dynlist-attrset groupOfURLs memberURL member

Файл, с которого я инициализировал БД:
dn: dc=mycompany,dc=ru
objectClass: organization
objectClass: dcObject
dc: mycompany
o: My Company

# People с подразделами
dn: ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: People

dn: ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: Dep1

dn: ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep11

dn: ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: WorkGroup111

dn: ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: WorkGroup112

dn: ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep12

dn: ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep13

dn: ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: WorkGroup131

dn: ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: Dep2

dn: ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep21

dn: ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: WorkGroup211

dn: ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep22

dn: ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: SubDep23

# Учётные записи
dn: uid=dep_1_boss,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: dep_1_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: Dep1

dn: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_11_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep11

dn: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_111_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: WorkGroup111

dn: uid=wg_111_user1,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_111_user1
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup111

dn: uid=wg_111_user2,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_111_user2
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup111

dn: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_112_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: WorkGroup112

dn: uid=wg_112_user1,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_112_user1
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup112

dn: uid=sub_dep_12_boss,ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_12_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep12

dn: uid=sub_dep_13_boss,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_13_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep13

dn: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_131_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: WorkGroup131

dn: uid=wg_131_user1,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_131_user1
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup131

dn: uid=dep_2_boss,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: dep_2_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: Dep2

dn: uid=sub_dep_21_boss,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_21_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep21

dn: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_211_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: WorkGroup211

dn: uid=wg_211_user1,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_211_user1
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup211

dn: uid=wg_211_user2,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: wg_211_user2
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: WorkGroup211

dn: uid=sub_dep_22_boss,ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_22_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep22

dn: uid=sub_dep_23_boss,ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: sub_dep_23_boss
cn: Иванов Иван
sn: Иванов
userPassword: 123
ou: Bosses
ou: SubDep23

# Группы
dn: ou=Groups,dc=mycompany,dc=ru
objectClass: organizationalUnit
ou: Groups

dn: cn=DepBosses,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: DepBosses
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=Dep*))

dn: cn=SubDepBosses_Dep1,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: SubDepBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=SubDepBosses_Dep2,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: SubDepBosses_Dep2
memberURL: ldap:///ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=SubDepBosses_All,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: SubDepBosses_All
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=WGBosses_11,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_11
memberURL: ldap:///ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_13,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_13
memberURL: ldap:///ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_Dep1,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_21,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_21
memberURL: ldap:///ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_Dep2,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_Dep2
memberURL: ldap:///ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_All,ou=Groups,dc=mycompany,dc=ru
objectclass: groupOfURLs
cn: WGBosses_All
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

При такой структуре динамические группы наполняются так:
$ ldapsearch -x -LLL -s one -b ou=Groups,dc=mycompany,dc=ru -o ldif-wrap=no
dn: cn=DepBosses,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: DepBosses
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=Dep*))
member: uid=dep_1_boss,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=dep_2_boss,ou=Dep2,ou=People,dc=mycompany,dc=ru

dn: cn=SubDepBosses_Dep1,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))
member: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_12_boss,ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_13_boss,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru

dn: cn=SubDepBosses_Dep2,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_Dep2
memberURL: ldap:///ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))
member: uid=sub_dep_21_boss,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_22_boss,ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_23_boss,ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru

dn: cn=SubDepBosses_All,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_All
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))
member: uid=sub_dep_11_boss,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_12_boss,ou=SubDep12,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_13_boss,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_21_boss,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_22_boss,ou=SubDep22,ou=Dep2,ou=People,dc=mycompany,dc=ru
member: uid=sub_dep_23_boss,ou=SubDep23,ou=Dep2,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_11,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_11
memberURL: ldap:///ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_13,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_13
memberURL: ldap:///ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_Dep1,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_21,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_21
memberURL: ldap:///ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_Dep2,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_Dep2
memberURL: ldap:///ou=Dep2,ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru

dn: cn=WGBosses_All,ou=Groups,dc=mycompany,dc=ru
objectClass: groupOfURLs
cn: WGBosses_All
memberURL: ldap:///ou=People,dc=mycompany,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))
member: uid=wg_111_boss,ou=WorkGroup111,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_112_boss,ou=WorkGroup112,ou=SubDep11,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_131_boss,ou=WorkGroup131,ou=SubDep13,ou=Dep1,ou=People,dc=mycompany,dc=ru
member: uid=wg_211_boss,ou=WorkGroup211,ou=SubDep21,ou=Dep2,ou=People,dc=mycompany,dc=ru

Как видите, все члены в группах определяются как надо. Правда, пришлось для этого вводить по два значения атрибута ou (конечно же, можно использовать абсолютно любой атрибут, они нужны только для построения фильтра в URL в атрибуте memberURL динамической группы) в каждую учётку, иначе нормально URL для динамических групп построить не удавалось =( . Мне кажется, что трудозатраты на ведение доп. атрибутов в учётках записей пользователей примерно те же, что и на ведение классических групп на объектном классе groupOfNames, так что, наверное, в данном случае нет смысла заморачиваться с динамическими группами. К тому же, с классическими группами Вы сможете использовать своё любимое наложение memberof.

Какие бы группы Вы не выбрали, openfire настраивается одинаково: отдельно аутентификация, отдельно группы (комнаты?). Аутентификация:
ldap.host -- тут, понятно, указывается имя/адрес сервера

ldap.baseDN -- dc=mycompany,dc=ru
ldap.alternateBaseDN --?
Эти два поля нужны для указания базового DN поиска. Не очень понятно из описания, зачем нужно второе. На всякий случай лучше указать суффикс всей БД, поскольку отдельного baseDN для групп я не нашёл. Можно попробовать в ldap.baseDN указать ou=People,dc=mycompany,dc=ru , а в ldap.alternateBaseDN -- ou=Groups,dc=mycompany,dc=ru

ldap.adminDN
ldap.adminPassword
Эти два поля нужны если у Вас нет анонимного доступа к каталогу на чтение.

ldap.usernameField -- uid
ldap.nameField -- cn
ldap.emailField -- mail
Эти поля будут использваться для выдачи информации о пользователе. Значения по умолчанию вполне подойдут

ldap.searchFilter -- (uid={0})
Фильтр по умолчанию вполне хорош. Но если Вам нужны доп. ограничения, вы можете их определить -- с memberof у Вас получился хороший фильтр, но тогда нужно, чтобы все xmpp-пользователи входили ещё и в эту группу.

Теперь группы:
ldap.groupNameField -- cn
ldap.groupMemberField -- member
ldap.groupDescriptionField -- description
Значения по умолчанию для этих полей вполне подходящие.

ldap.posixMode -- false
Поскольку мы не используем posix-группы c атрибутами memberUid, то нужно поставить false (значение по умолчанию)

ldap.groupSearchFilter -- (&(cn={0})(objectClass=groupOfName))  --- для статических групп
ldap.groupSearchFilter -- (&(cn={0})(objectClass=groupOfURL))  --- для динамических групп
Значение по умолчанию для этого параметра -- (cn={0}) -- на мой взгляд, неудачное, поскольку атрибут cn есть почти во всех записях, а не только в групповых, поэтому лучше всё-таки ужесточить правила отбора.

Кажется, ответил на все вопросы. Надеюсь, стало понятнее.
Егор


manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Егор, здравствуйте!!! Спасибо Вам за такую большую проделанную работу!

Споткнулась я на первом пункте))
Насколько я поняла, в OpenLDAP используется два вида конфигурационных файлов: slapd.conf (вроде как устаревший) и cn=config. Вы привели пример конфигурации slapd.conf (также частое ее использование нашла в Интернете). У себя на сервере этого файла не обнаружила, но добросовестно его создала и положила в директорию /etc/openldap (понимаю, что если другой принцип считывания конфига, но попробовать надо)))

Модуль dynlist.la тоже загрузила, по   инструкции на этом же сайте:
1. Создала ldif-файл
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: dynlist.la
Загрузила его
ldapadd -Y EXTERNAL -H ldapi:/// -f ~/dynlist.ldif   
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=module,cn=config"
Как посмотреть загрузился ли модуль - не нашла.

Как наложение не получается загрузить, сделала по примеру добавления наложения memberOf. Его добавляла так:
dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
Аналогично добавляю и dynlist
dn: olcOverlay=dynlist,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcDynlist
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: dynlist-attrset groupOfURLs memberURL member
Вывод получается таким:
[root@ldap164 ~]# ldapadd -c -Y EXTERNAL -H ldapi:/// -f overlaydynlist.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcOverlay=dynlist,olcDatabase={2}hdb,cn=config"
ldap_add: Invalid syntax (21)
        additional info: objectClass: value #1 invalid per syntax
Созданную структуру отделов и динамических групп загрузила, но без наложения dynlist member'ы не ищутся, просто выводится ссылка.
ldapsearch -x -LLL -s one -b ou=Groups,dc=domen,dc=ru -o ldif-wrap=no
dn: cn=DepBosses,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: DepBosses
memberURL: ldap:///ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=Dep*))

dn: cn=SubDepBosses_Dep1,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=SubDepBosses_Dep2,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_Dep2
memberURL: ldap:///ou=Dep2,ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=SubDepBosses_All,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: SubDepBosses_All
memberURL: ldap:///ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=SubDep*))

dn: cn=WGBosses_11,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: WGBosses_11
memberURL: ldap:///ou=SubDep11,ou=Dep1,ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_13,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: WGBosses_13
memberURL: ldap:///ou=SubDep13,ou=Dep1,ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))

dn: cn=WGBosses_Dep1,ou=Groups,dc=domen,dc=ru
objectClass: groupOfURLs
cn: WGBosses_Dep1
memberURL: ldap:///ou=Dep1,ou=People,dc=domen,dc=ru??sub?(&(ou=Bosses)(ou=WorkGroup*))


egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна! Простите, что долго не отвечал -- я сейчас с семьёй в отпуске, со временем и с Интернетом ужасная напряжёнка.

Как я понял, Ваш вопрос в том, как добавить наложение dynlist в динамической конфигурации. Должно быть примерно так (адаптируйте к своему типу БД):
dn: olcOverlay=dynlist,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcDynamicList
olcOverlay: dynlist
olcDlAttrSet: groupOfURLs memberURL member

Егор

manik207

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Спасибо за ответ, Егор! Приятного вам отдыха!

Загрузила оверлей dynlist, это видно из списков установленных оверлеев:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config
dn: cn=module{0},cn=config
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}nis,cn=schema,cn=config
dn: cn={3}inetorgperson,cn=schema,cn=config
dn: cn={4}dyngroup,cn=schema,cn=config
dn: olcDatabase={-1}frontend,cn=config
dn: olcDatabase={0}config,cn=config
dn: olcDatabase={1}monitor,cn=config
dn: olcDatabase={2}hdb,cn=config
dn: olcOverlay={0}dynlist,olcDatabase={2}hdb,cn=config
Структура хранимых данных осталась прежней (созданы все пользователи и динамические группы по вашему ldif), но команда поиска по ou=Group динамических групп выдает отличный от вашего вывод:
ldapsearch -x -LLL -s one -b ou=Group,dc=domen,dc=ru -o ldif-wrap=no
dn: roomNumber=1,ou=Group,dc=domen,dc=ru
cn:: 0J3QsNC30LLQsNC90LjQtSDQs9GA0YPQv9C/0Ys=
objectClass: room
objectClass: top
roomNumber: 1
description: 192.168.1.67:25565
Т.е. выдает запись только об этой организационной единице.
Если искать от базового DN, вывод такой:
ldapsearch -x -LLL -s one -b dc=domen,dc=ru -o ldif-wrap=no
dn: cn=Manager,dc=domen,dc=ru
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=domen,dc=ru
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=domen,dc=ru
objectClass: organizationalUnit
ou: Group
description: 1.0
description: 1.11.2

dn: ou=Groups,dc=domen,dc=ru
objectClass: organizationalUnit
ou: Groups
Это наложение не подгрузилось или я запрос делаю неверный?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте, Анна. Скорее всего, Вы ошиблись с подветкой, в которой ищите (ou=Groups вместо ou=Group). Поскольку каталог у Вас пока небольшой, нет смысла вводить дополнительное ограничение на диапазон поиска (-s one). Проверьте, что вообще находится в каталоге:
ldapsearch -x -LLL -b dc=domen,dc=ru -o ldif-wrap=no dn

А затем выбирайте нужную ветку:
ldapsearch -x -LLL -b ou=Groups,dc=domen,dc=ru -o ldif-wrap=no

Егор