Форум проекта Pro-LDAP.ru
Общие вопросы по LDAP => Общий раздел => Тема начата: manik207 от 12 Июль 2017, 19:41:21
-
Егор, здравствуйте.
Помогите прояснить, как лучше заточить 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 - руководители отделов одного департамента
Собственно, это структура. Как-то это распределение по группам в лдап упаковать можно?
-
Здравствуйте, Анна! Отличная псевдографика =) .
Группы для такой структуры реализовать, в принципе, не проблема, как статические, так и динамические. Главный вопрос тут даже не в группах, а в том, что из каталога LDAP xmpp-сервер рассматривает в качестве "комнаты"? То есть должна ли эта быть некая запись с определёнными атрибутами, или значения каких-то атрибутов, полученные списком при выполнении поискового запроса, или что-то ещё. В общем, нужно понять, что хочет увидеть xmpp-сервер, и сформировать нужную ему структуру. Надеюсь, я понятно объясняю =) ?
Для начала, какой xmpp-сервер Вы планируете использовать?
Егор
-
Егор, здравствуйте! Спасибо, рисовала я долго, результат мне тоже понравился))
Сейчас пытаюсь настроить это на openfire, хотя, если ejabberd или какой-то другой будет лучше подходить под структуру, можно освоить и его.
В каком виде openfire запрашивает группы, я не знаю. У меня получилось разрешить вход пользователям группе cn=xmpp,dc=domen,dc=ru и через фильтр добавить пользователей группы cn=A5,cn=xmpp,dc=domen,dc=ru. В настройках сервера это выглядит как поиск по группам
(&(ObjectClass=GroupOfNames)(|(cn=xmpp)(cn=A5)))
Это пока всё, что мне понятно.
-
О, теперь стало понятней больше! Сделала в лдапе (он тестовый, если что - поправлю))) такую схему:
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
-
Здравствуйте, Анна! Пришёл мой черёд мучиться с псевдографикой.
Начнём с того, что в документации 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
Обе они отражают ту задачу, которую Вы хотите решить. Я сторонник простоты, поэтому мне по душе второй вариант.
Егор
-
И Вам спасибо за псевдографику, всё достаточно наглядно.
Вопросы возникли следующие:
1. Как я поняла, первый от второго варианта отличается только структурой ou=People (наличием подразделов). Ou=Groups имеет одноранговую структуру, наличие подгрупп в соответствии со структурой департаментов мы не делаем, потому что ... (вопрос, а, кстати, почему? LDAP не воспринимает многовложенность групп?)
2. Вся эта структура делается только вручную? Или существуют какие-то средства автоматизации? Например, user, помещенный в определенный ou, автоматически определяется в определенной Groups (а то легко запутаться). Сейчас пользователей приходится вести в Экселе, из которого я и ввожу их в LDAP. Это позволяет хоть немного избежать путаницы, особенно при многократном дублировании записей в разных системах. Подскажите, чем пользуетесь Вы для учета изменений, которые могут приходить от кадровика - по электронной почте, от директора - устно, от начальников департаментов - по той же аське, в стиле "этого надо добавить, этого - переместить, этого - заблокировать" (раньше бы первый ваш пример подошел бы лучше)
-
Здравствуйте, Анна!
1. Как я поняла, первый от второго варианта отличается только структурой ou=People (наличием подразделов). Ou=Groups имеет одноранговую структуру, наличие подгрупп в соответствии со структурой департаментов мы не делаем, потому что ... (вопрос, а, кстати, почему? LDAP не воспринимает многовложенность групп?)
Дело в том, Анна, что LDAP вообще ничего не воспринимает, не додумывает и т.п., он только хранит Ваши данные. А воспринимают и додумывают те приложения, которые обращаются в LDAP за данными: в каком виде они готовы воспринять, так они и будут интерпретировать полученные из каталога данные.
И ещё один важный момент. Не стоит думать, что иерархическая структура представления данных говорит о вложенности чего-то одного во что-то другое. Каждая запись LDAP -- это автономный объект, НИКАК НЕ СВЯЗАННЫЙ с другими объектами. Иерархичность используется только в именовании записей, и всё. То есть, если у Вас две записи группы и одна будет дочерней записью по отношению к другой, то это не говорит о том, что члены дочерней группы будут входить в родительскую. Это будут две независимые друг от друга группы со своими членами. Так что будете ли Вы выстраивать некую иерархию групп, или оставите их на одном уровне иерархии -- не играет ровно никакой роли, они будут найдены поисковым запросом и обработаны одинаково. То же самое, кстати, касается и иерархии записей пользователей. Как Вам удобно, так и организуйте каталог.
2. Вся эта структура делается только вручную? Или существуют какие-то средства автоматизации? Например, user, помещенный в определенный ou, автоматически определяется в определенной Groups (а то легко запутаться). Сейчас пользователей приходится вести в Экселе, из которого я и ввожу их в LDAP. Это позволяет хоть немного избежать путаницы, особенно при многократном дублировании записей в разных системах. Подскажите, чем пользуетесь Вы для учета изменений, которые могут приходить от кадровика - по электронной почте, от директора - устно, от начальников департаментов - по той же аське, в стиле "этого надо добавить, этого - переместить, этого - заблокировать" (раньше бы первый ваш пример подошел бы лучше)
Во-первых, каталог проектируется сразу под все сервисы, которыми планирует пользоваться организация. Зачем что-то где-то дублировать, когда есть возможность использовать одни и те же учётки, а доступ к сервисам предоставлять (или не предоставлять) на основе каких-либо признаков этих учёток?
Во-вторых, если у Вас действительно часто меняется штатная структура, то есть смысл настроить динамические группы (https://pro-ldap.ru/tr/zytrax/ch11/dynamic.html). Сделать в учётках начальников какой-нибудь признак, что они начальники, например (с понравившейся Вам сложной структурой):
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)))
В общем, всё в Ваших руках. Думайте и реализуйте.
Егор
-
Про динамические группы не знала, что такое бывает и как правильно спросить, чтобы получить ответ. Спасибо Вам!
Не совсем поняла по атрибут 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 не воспринимает найденных пользователей...
Подскажите, как-то можно проверить из командной строки, что пользователи из динамической группы вообще ищутся?
-
Здравствуйте, Анна! Извините, что не сразу ответил.
Чтобы работали динамические группы, нужно не только схему подключить, но и добавить к базе наложение dynlist (https://pro-ldap.ru/tr/man/slapo-dynlist.5.html). Понятное объяснение по динамическим группам в учебнике OLAG24 (https://pro-ldap.ru/tr/admin24/overlays.html#Dynamic%20Lists).
Я тут сделал тестовую конфигурацию по мотивам той структуры, которую мы обсуждали. 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 есть почти во всех записях, а не только в групповых, поэтому лучше всё-таки ужесточить правила отбора.
Кажется, ответил на все вопросы. Надеюсь, стало понятнее.
Егор
-
Егор, здравствуйте!!! Спасибо Вам за такую большую проделанную работу!
Споткнулась я на первом пункте))
Насколько я поняла, в 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*))
-
Здравствуйте, Анна! Простите, что долго не отвечал -- я сейчас с семьёй в отпуске, со временем и с Интернетом ужасная напряжёнка.
Как я понял, Ваш вопрос в том, как добавить наложение dynlist в динамической конфигурации. Должно быть примерно так (адаптируйте к своему типу БД):
dn: olcOverlay=dynlist,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcDynamicList
olcOverlay: dynlist
olcDlAttrSet: groupOfURLs memberURL member
Егор
-
Спасибо за ответ, Егор! Приятного вам отдыха!
Загрузила оверлей 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
Это наложение не подгрузилось или я запрос делаю неверный?
-
Здравствуйте, Анна. Скорее всего, Вы ошиблись с подветкой, в которой ищите (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
Егор