Я видел похожие вопросы, связанные с настройкой 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 наложениесделает то, что вы ищете. Я подозреваю,этот вопросрасскажет вам, что вам нужно знать, чтобы начать это делать.