Я видел похожие вопросы, связанные с настройкой Apache для аутентификации через LDAP, но этот основной вопрос все еще меня смущает.
В своей настройке я создал пользователей, у которых у всех одинаковый основной GID, а затем добавил пользователей в различные (дополнительные / вторичные) группы. Я протестировал эти учетные записи пользователей, и в большинстве случаев все работает нормально - мои разрешения, основанные на членстве в дополнительных группах, работают. Я использовал smbldap-tools
пакет для настройки моих пользователей и групп, в частности, я использовал smbldap-usermod -G +NEW_GROUP user
для добавления пользователей в дополнительные группы.
Если я сделаю getent group
Я вижу эти дополнительные группы и их членов. Хорошо.
Если я посмотрю на запись LDAP для одной из дополнительных групп, я увижу всех пользователей в списке, как и ожидалось.
Тем не мение, когда я смотрю на запись LDAP каждого пользователя, только gidNumber
соответствующая первичной группе. То есть в записях LDAP для каждого пользователя указана только основная группа и не упоминаются вторичные группы.
Как Samba / LDAP (с использованием smbldap-tools) обрабатывает дополнительные / вторичные группы?
Кроме того, как я могу сформировать поисковый фильтр для идентификации членов дополнительной группы?
LDAP - это просто каталог информации. Как эта информация сохраняется и извлекается, зависит от приложения. В этом случае пользователи и группы posix моделируются на основе файлов / etc / passwd и / etc / group. Каждая запись пользователя содержит gid для своей основной группы. Каждая группа перечисляет всех своих членов (обычно за вычетом тех, кто перечисляет ее как свою основную группу).
Samba и различные плагины nss для хранения информации о пользователях и группах в LDAP выполняют поиск групп, членом которых является пользователь, при входе в систему. Атрибут memberUid должен быть проиндексирован, чтобы ускорить поиск членства в группах. Для данной учетной записи пользователя фильтр поиска выглядит примерно так:
(&(objectclass=posixGroup)(memberUid=$user))
Если вы хотите увидеть пользователей в определенной группе, вы можете выполнить поиск с помощью:
(&(objectclass=posixGroup)(cn=$group))
Это предполагает, что все ваши группы принадлежат объектному классу posixGroup.
Я не большой пользователь OpenLDAP, но если бы это была среда Active Directory, я бы использовал атрибут memberOf, присутствующий в каждом объекте учетной записи пользователя. В мире OpenLDAP это выглядит как memberOf оверлей сделает то, что вы ищете. Я подозреваю этот вопрос расскажет вам, что вам нужно знать, чтобы начать работу.