Группы из LDAP: “getent” правильно сообщает о членстве, но они отсутствуют в выводе “id”.

Вопрос или проблема

У меня есть машина с 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. Разберем возможные причины и шаги по устранению неполадок.

Анализ проблемы

  1. Проверка конфигурации NSS и PAM: Убедитесь, что файлы конфигурации NSS (/etc/nsswitch.conf) и PAM (/etc/pam.d/ и, возможно, /etc/pam_ldap.conf) правильно настроены для использования LDAP. Ошибки в этих файлах могут привести к различиям в поведении команд getent и id.

  2. Различия в LDAP атрибутах: Как указано, иногда необходимо, чтобы членство в группе и пользователя в LDAP было задано явным образом. Это может означать использование таких атрибутов, как memberUid в записи группы и, возможно, memberOf в записи пользователя. Проверьте, имеет ли пользователь alice атрибут memberOf с указанием на mygroup.

  3. Кэширование NSS: В некоторых системах используется кэширование для ускорения работы NSS, например, nscd (Name Service Cache Daemon). Оно может кэшировать неверные данные. Очистите кэш командой systemctl restart nscd.

  4. LDAP ACL (Access Control List): Убедитесь, что ACL на сервере LDAP разрешают корректный доступ к информации о группах и членстве. Ошибочные настройки могут препятствовать получению полных данных.

  5. Синхронизация 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. Это обеспечит надежную и предсказуемую работу системной аутентификации и авторизации.

Оцените материал
Добавить комментарий

Капча загружается...