Как LDAP обрабатывает дополнительные/вторичные группы пользователей?

Как LDAP обрабатывает дополнительные/вторичные группы пользователей?

Я видел похожие вопросы, связанные с настройкой Apache для аутентификации через LDAP, но этот простой вопрос все еще сбивает меня с толку.

В своей настройке я создал пользователей, у которых у всех был один и тот же основной GID, затем я добавил пользователей в различные (дополнительные/вторичные) группы. Я протестировал эти учетные записи пользователей, и в большинстве ситуаций все работает отлично — мои разрешения, основанные на членстве в дополнительных группах, работают. Я использовал пакет smbldap-toolsдля настройки своих пользователей и групп, и в частности я использовал его smbldap-usermod -G +NEW_GROUP userдля добавления пользователей в дополнительные группы.

Если я это сделаю, getent groupя увижу эти дополнительные группы и их членов. Хорошо.

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

Однако,Когда я смотрю на запись LDAP каждого пользователя, то gidNumberвижу только соответствующую первичной группе. То есть, записи LDAP для каждого пользователя содержат только первичную группу и не содержат упоминания о вторичных группах.

Как Samba/LDAP (используя smbldap-tools) обрабатывает дополнительные/вторичные группы?

Далее, как я могу сформировать фильтр поиска для определения членов дополнительной группы?

решение1

LDAP — это просто каталог информации. То, как эта информация хранится и извлекается, зависит от приложения. В этом случае пользователи и группы posix моделируются по файлам /etc/passwd и /etc/group. Каждая запись пользователя содержит gid для своей основной группы. Каждая группа содержит список всех своих членов (обычно за исключением тех, кто указывает ее как свою основную группу).

Samba и различные плагины nss для хранения информации о пользователях и группах в LDAP выполняют поиск групп, членом которых является пользователь при входе в систему. Атрибут memberUid должен быть проиндексирован, чтобы ускорить поиск членства в группах. Для заданной учетной записи пользователя фильтр поиска выглядит примерно так:

(&(objectclass=posixGroup)(memberUid=$user))

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

(&(objectclass=posixGroup)(cn=$group))

Это предполагает, что все ваши группы относятся к объектному классу posixGroup.

решение2

Я не большой пользователь OpenLDAP, но если бы это была среда Active Directory, я бы использовал атрибут "memberOf", присутствующий в каждом объекте учетной записи пользователя. В мире OpenLDAP это выглядит какmemberOf наложениесделает то, что вы ищете. Я подозреваю,этот вопросрасскажет вам, что вам нужно знать, чтобы начать это делать.

Связанный контент