Как обычно реализуются вложенные группы в LDAP?
Я перехожу к LDAP как возможному инструменту для управления серверами доступа и исходным кодом на работе, и хотя я смог понять основные понятия, такие как представление пользователей и компьютеров как объектов, которые создают атрибуты, и определяют, какие атрибуты должны Применить к сущности на основе примененных к ним объектных классов, есть несколько ошибок, которые все еще не имеют смысла для меня, и я надеюсь, что кто-то может помочь объяснить, как они работают.
Как работают вложенные группы?
Я могу понять что ou
(организационная единица), и я могу понять, что в них помещают людей и используют класс groupOfNames для работы в качестве контейнера для участников, например, этот фрагмент кода LDIF из zytrax:
# create FIRST Level groups branch
dn: ou=groups,dc=example,dc=com
objectclass:organizationalunit
ou: groups
description: generic groups branch
# create the itpeople entry under groups
dn: cn=itpeople,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: itpeople
description: IT security group
member: cn=William Smith,ou=people,dc=example,dc=com
# create the hrpeople entry under groups
dn: cn=hrpeople,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: hrpeople
description: Human Resources group
member: cn=Robert Smith,ou=people,dc=example,dc=com
Как бы я добавил дополнительные уровни вложенности?
То, что мне нужно, это что-то вроде этого псевдокода здесь:
ou='Projects' /
description: This top level group has a few people in it that can create new groups, and control who's in them
member: cn=Robert Smith,ou=people,dc=example,dc=com
-- somethingsomethingAbitrarilyNestedGroup='project-name'
member: cn=Robert Smith,ou=people,dc=example,dc=com
-- groupOfNames = 'project-name development'
member: cn=Robert Smith,ou=people,dc=example,dc=com
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server1$,ou=servers,dc=example,dc=com
-- groupOfNames = 'project-name staging'
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server2$,ou=servers,dc=example,dc=com
Учитывая эту иерархию, каков наилучший способ предоставить доступ к этой группе сейчас?
Я не вижу простого способа вложения произвольной группы здесь - среди обычных доступных классов, без использования дорогостоящего инструмента с закрытым исходным кодом, но кажется, что он не должен быть таким сложным.
Как это обычно делается с помощью такого инструмента, как OpenLDAP, чтобы позволить другим клиентам ldap контролировать членство в группе, когда они прошли проверку подлинности как пользователь с правильными правами??
2 ответа
Ваш вопрос немного запутан - я не уверен, что вы имеете в виду "каков наилучший способ предоставить доступ к этой группе сейчас" в контексте нескольких первых параграфов.
Вложенные группы очень просты. Если вы используете объектный класс groupOfNames, просто добавьте еще один member
атрибут вашей родительской группы, со значением, являющимся DN дочерней группы.
Из вашего псевдокода:
# Assuming your "groups" OU already exists...
# First create the child groups
dn: cn=project-name development,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: project-name development
member: cn=Robert Smith,ou=people,dc=example,dc=com
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server1$,ou=servers,dc=example,dc=com
dn: cn=project-name staging,ou=groups,dc=example,dc=com
objectclass: groupofnames
cn: project-name development
member: cn=Jane Doe,ou=people,dc=example,dc=com
member: cn=server2$,ou=servers,dc=example,dc=com
# Now create the parent group
dn: 'project-name,ou=groups,dc=example,dc=com'
objectclass: groupofnames
member: cn=Robert Smith,ou=people,dc=example,dc=com
member: cn=project-name staging,ou=groups,dc=example,dc=com
member: cn=project-name development,ou=groups,dc=example,dc=com
Hiearchy внутри подразделений на самом деле только для разделения вашего дерева LDAP на "логические" сегменты на основе структуры вашей организации. Так, например, вы можете оставить все свои группы для управления "Отделом разработки" в их собственном подразделении, так что хорошо и понятно, к чему они относятся. Объекты могут ссылаться друг на друга и довольно счастливо вкладываться, ссылаясь друг на друга с помощью соответствующих атрибутов (в данном случае, member
).
Я считаю, что при ссылке на объекты пользователя вы должны использовать uid=
скорее, чем cn=
Проблема, с которой я сталкиваюсь с вложенными группами, состоит в том, что многие приложения, которые могут ссылаться на группу, не знакомы с тем, как искать во вложенных группах объекты-члены.