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