Вопрос или проблема
У меня есть машина с Debian 10, которая использует PAM LDAP для аутентификации. В LDAP у меня есть два пользователя alice
и bob
, которые оба являются членами группы mygroup
. Все работало отлично (так что конфигурация не должна быть слишком далеко от правильной), пока я недавно не обнаружил какую-то странность с моими группами (не уверен, что произошло):
ldapsearch
сообщает, что пользовательalice
является членом группыmygroup
(и так и должно быть).getent group
показывает, что пользовательalice
является членом группыmygroup
(и так и должно быть).root@tux:~# getent group | grep mygroup mygroup:*:1210:alice,bob
id
не сообщает, чтоalice
является членом группыmygroup
:root@tux:~# id alice uid=1200(alice) gid=1200(alice) groups=1200(alice)
- На удивление, пользователь
bob
сообщается как членmygroup
:root@tux:~# id bob uid=1201(bob) gid=1201(bob) groups=1210(mygroup),1201(bob)
Раньше я думал, что и getent
, и id
получают свою информацию из библиотеки Name Service Switch (NSS). Я запутался и надеюсь на какие-то подсказки, как устранить проблему.
С некоторыми реализациями LDAP необходимо не только определять членов группы, но и задавать группы, членами которых является пользователь. (Одно не подразумевается другим – обе связи должны быть явно указаны.)
Посмотрите записи LDAP для alice и bob, показывают ли они членство в группах? Если да, убедитесь, что alice и bob действительно оба являются членами mygroup.
Аналогично, посмотрите на mygroup и подтвердите, что alice и bob оба являются ее членами.
.
Ответ или решение
Для решения проблемы, связанной с тем, что команда id
не отображает пользователя alice
в группе mygroup
, хотя команда getent group
показывает корректное членство, необходимо провести тщательное обследование настроек LDAP на Debian 10. Разберем возможные причины и шаги по устранению неполадок.
Анализ проблемы
-
Проверка конфигурации NSS и PAM: Убедитесь, что файлы конфигурации NSS (
/etc/nsswitch.conf
) и PAM (/etc/pam.d/
и, возможно,/etc/pam_ldap.conf
) правильно настроены для использования LDAP. Ошибки в этих файлах могут привести к различиям в поведении командgetent
иid
. -
Различия в LDAP атрибутах: Как указано, иногда необходимо, чтобы членство в группе и пользователя в LDAP было задано явным образом. Это может означать использование таких атрибутов, как
memberUid
в записи группы и, возможно,memberOf
в записи пользователя. Проверьте, имеет ли пользовательalice
атрибутmemberOf
с указанием наmygroup
. -
Кэширование NSS: В некоторых системах используется кэширование для ускорения работы NSS, например, nscd (Name Service Cache Daemon). Оно может кэшировать неверные данные. Очистите кэш командой
systemctl restart nscd
. -
LDAP ACL (Access Control List): Убедитесь, что ACL на сервере LDAP разрешают корректный доступ к информации о группах и членстве. Ошибочные настройки могут препятствовать получению полных данных.
-
Синхронизация LDAP: Пользовательские и групповые записи могут быть не синхронизированы. Проверьте, обновлялись ли записи
alice
илиmygroup
без отражения этих изменений в другой записи.
Шаги по диагностике и исправлению
-
Исследование записей LDAP: Используйте
ldapsearch
для детального просмотра записейalice
,bob
иmygroup
. Подтвердите, что в записиalice
присутствует информация о членстве вmygroup
.ldapsearch -x -LLL -b "ou=groups,dc=example,dc=com" "(cn=mygroup)" ldapsearch -x -LLL -b "ou=users,dc=example,dc=com" "(uid=alice)"
-
Редактирование записей LDAP: Если отсутствует нужный атрибут, добавьте его в записи
alice
илиmygroup
. Это можно сделать с помощью административных инструментов LDAP, таких какldapmodify
. -
Обновление кэша: После внесения изменений перезапустите сервисы, ответственные за кэширование.
-
Проверка работы без кэширования: Попробуйте временно отключить nscd для выявления зависимости от кэширования.
-
Журналирование и отладка: Включите детализированное логирование LDAP для выявления потенциальных ошибок в процессе разрешения членства.
Резюме
Проблема может быть вызвана несоответствиями в конфигурации NSS, PAM или самим LDAP, а также кэшированием данных NSS. Следуя указанным шагам, вы сможете диагностировать и исправить проблему отсутствия корректного отображения членства пользователей в группах с помощью инструмента id
. Это обеспечит надежную и предсказуемую работу системной аутентификации и авторизации.