Я установил nss_ldap, отредактировал nsswitch.conf, чтобы использовать ldap; вот мой /etc/ldap.conf
содержание:
host ldap.<mycompany>.com
base o=<mycompany>,c=<cc>
bind_policy soft
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2
Когда я делаю
getent passwd
Я получаю правильное представление обо всех именах пользователей в компании. Но если я сделаю
getent passwd <some user>
с известным допустимым именем пользователя ничего не возвращается, как если бы пользователь не существовал. (работает для локальных пользователей, не использующих ldap)
Если я компилирую nss_ldap с включенной отладкой, первый выводит много отладочных сообщений, например: nss_ldap: ==> do_result nss_ldap: <== do_result nss_ldap: ==> _nss_ldap_assign_userpassword nss_ldap: <== _nss_serpass_assign_assign_
но последний ничего не показывает. В системном журнале тоже ничего нет.
Это меня весьма озадачивает. С чего начать искать проблему? какие идеи где это могло быть?
Клиент работает под управлением Gentoo linux, nss_ldap-264. Сервер LDAP вне моего контроля.
Вы используете nscd, демон кэширования имен? У него может быть отрицательный кеш пользователя, и в этом случае выполняется /usr/sbin/nscd -i passwd
сделает кеш недействительным и вызовет повторную выборку.
getent passwd
работает, потому что он обходит nscd.