Назад | Перейти на главную страницу

кеш аутентификации sssd и ldap

На нашем компьютере с OpenSUSE 12.2 мы установили OpenLDAP и sssd демон. Мы используем эти две службы для аутентификации пользователей. Недавно мы создали скрипт, который динамически создает новых веб-пользователей для наших хостов, но теперь мы столкнулись с проблемой.

Похоже, что sssd использует какой-то кеш и во время getent passwd он возвращает пользователей, которые были удалены из LDAP. Иногда он не возвращает недавно созданного пользователя сразу, поскольку это необходимо в дальнейшем в скрипте (для установки разрешений с помощью setfacl и chown).

Перезапуск LDAP, sssd или nscd не помогает, ни очистка кеша с помощью sss_cache -U. Мы пробовали уменьшить кеш в конфигурации sssd но вроде ни на что не влияет.

Нам нужно как-то явно обновить кеш после добавления нового пользователя в LDAP или вообще отключить кеш.

Кто-нибудь испытывал подобную проблему?

На странице руководства (sssd.conf):

NSS configuration options
       These options can be used to configure the Name Service Switch (NSS)
       service.

       enum_cache_timeout (integer)
           How many seconds should nss_sss cache enumerations (requests for
           info about all users)
       Default: 120

Я бы вставил что-то вроде:

[nss]
enum_cache_timeout 10

(отрегулируйте секунды по своему усмотрению)

Пытаться sss_cache -E

или попробуйте остановить sssd, удалить файлы в / var / lib / sss / db / * и перезапустить sssd

У меня были похожие проблемы

Я заметил, что getent passwd | grep <username> и getent passwd <username> не вернет те же результаты,

Используя strace, я обнаружил, что getent passwd <username> проверяет данные в "/var/lib/sss/mc/passwd"

как getent passwd | grep <username> подключится к /var/lib/sss/pipes/nss и получить данные оттуда.

Это действительно сбивает меня с толку, поскольку оба подхода, похоже, поражают разные кеши. Кажется, что эти кеши обновляются, когда я запускаю sudo su - <username> но, похоже, в остальном действительны в течение нескольких часов.

В результате на практике, например, Доступ по ssh не будет работать для пользователя через несколько минут после его удаления из ldap, но getent passwd будет продолжать показывать его в течение нескольких часов, поэтому мне сложно проверить, действительно ли эти пользователи удалены или нет (без очистки некоторые кеши все время вручную)

  • Вы не можете полностью отключить кеширование с помощью sssd.

  • Вы можете полностью отключить sss в качестве поставщика аутентификации и просто запросить LDAP напрямую, если вы этого хотите.

Например, в /etc/nsswitch.conf, измените строки вроде:

passwd:     files sss

к

passwd:     files ldap
  • Вы можете принудительно очистить кеш, удалив /var/lib/sss/db/*

Вы можете попробовать отключить кеширование учетных данных, добавив директиву в /etc/sssd/sssd.conf:

[domain/default]
cache_credentials = False

Затем вы можете проверить, что sssd использует кеш для учетных данных с помощью консольной команды:

# authconfig --test|grep credential
credential caching in SSSD is disabled

Обратите внимание, что наличие cache_credentials = True в Fedora 30/31 приводит к ошибке, из-за которой невозможно войти в систему с использованием пользователей LDAP. Я не нашел зарегистрированной ошибки, связанной с этим, поэтому пишу ее здесь.