Мы используем LDAP для аутентификации пользователей наших устройств с помощью nslcd, и мы видим такие сообщения в системном журнале:
/var/log/syslog.1:Dec 20 06:25:11 T53-1014-014 nslcd[1496]: [398c89] <passwd="*"> "*": name denied by validnames option
/var/log/syslog.1:Dec 20 06:25:11 T53-1014-014 nslcd[1496]: [4fe9f9] <passwd="*"> "*": name denied by validnames option
/var/log/syslog.1:Dec 20 06:25:14 T53-1014-014 nslcd[1496]: [b5af5c] <passwd="*"> "*": name denied by validnames option
/var/log/syslog.1:Dec 20 06:25:15 T53-1014-014 nslcd[1496]: [1226bb] <passwd=-1> ldap_search_ext() failed: Can't contact LDAP server
/var/log/syslog.1:Dec 20 06:25:15 T53-1014-014 nslcd[1496]: [1226bb] <passwd=-1> no available LDAP server found, sleeping 1 seconds
/var/log/syslog.1:Dec 20 06:25:16 T53-1014-014 nslcd[1496]: [34b6a8] <passwd="*"> "*": name denied by validnames option
/var/log/syslog.1:Dec 20 06:25:16 T53-1014-014 nslcd[1496]: [233c99] <passwd=-1> ldap_search_ext() failed: Can't contact LDAP server
/var/log/syslog.1:Dec 20 06:25:16 T53-1014-014 nslcd[1496]: [233c99] <passwd=-1> no available LDAP server found, sleeping 1 seconds
/var/log/syslog.1:Dec 20 09:01:04 T53-1014-014 nslcd[1496]: [0c57b1] <passwd=-1> ldap_search_ext() failed: Can't contact LDAP server
/var/log/syslog.1:Dec 20 09:01:04 T53-1014-014 nslcd[1496]: [0c57b1] <passwd=-1> no available LDAP server found, sleeping 1 seconds
Мы хотим избавиться от этих сообщений, просто не перенастраивая то, что регистрируется. Поэтому желательно, чтобы мы узнали, что происходит, и переконфигурируем систему так, чтобы эти сообщения больше не генерировались. Но как это анализировать?
Проблема в том, что любой процесс может сделать что-то, что заставит систему выполнить действие аутентификации, и в журнале вы не можете увидеть, какой процесс запускает действие аутентификации. Есть мысли, как это анализировать?
Я могу добавить дополнительный диагностический код в источник nslcd, если это поможет, и развернуть этот инструментальный исполняемый файл.
Мы используем старый дистрибутив Ubuntu: 12.04, nss-pam-ldapd-0.8.4
Обновление: я создал модифицированную версию nslcd, которая регистрирует командную строку приложений, которые к нему подключаются. Очевидно, это очень помогает.
Из man 5 nslcd.conf
действительные имена REGEX
Эта опция может использоваться, чтобы указать, как имена пользователей и групп проверяются в системе. Этот шаблон используется для проверки всех имен пользователей и групп, которые запрашиваются и возвращаются из LDAP.
Регулярное выражение следует указывать как расширенное регулярное выражение POSIX. Само выражение должно быть разделено символами косой черты (/), а в конце может быть добавлен флаг «i», чтобы указать, что совпадение должно быть без учета регистра. Значение по умолчанию - / ^ [a-z0-9.@ $ ()] ([a-z0-9.@ $ () \ ~ -] * [a-z0-9 ._ @ $ () ~ -])? $ / i
Я предполагаю, что вы пытаетесь запросить имя пользователя с ''в нем (вероятно, это признак того, что кто-то думает, что подстановка файлов работает с именами пользователей) или ответные сообщения, исходящие из ldap, содержат пользователя с'' в этом.
Вы можете попытаться разрешить неправильное имя пользователя или изменить validnames
regex, чтобы оно принимало '*' как допустимое имя пользователя.
Заметка что выполнение этого может привести к неожиданным проблемам, особенно в сценариях оболочки, где '*' используется в качестве выражения, если оно не экранировано или не заключено в кавычки.