Исправление нескольких slap_global_control: нераспознанный элемент управления: в системном журнале

На сервере Debian 8, который использует LDAP для аутентификации пользователя (установлены slapd, libpam-ldapd и nslcd), я получаю следующее сообщение в системном журнале, несколько раз, каждый раз, когда системе нужно искать информацию о пользователе в LDAP (например, ввод id [имя пользователя] или установка разрешений для папки и т. д.)

slap_global_control: unrecognized control: 1.3.6.1.4.1.4203.666.5.16

Этот контроль, очевидно, является deref-контролем. Мне не удалось найти какую-либо информацию о нем, за исключением того, что это полезно при хранении базы данных LDAP на нескольких серверах. Это никогда не относится к моим машинам. Я никогда сознательно не активировал этот контроль.

Это делает систему крайне медленной в определенных обстоятельствах, например, когда запускается скрипт импорта пользователей и импортируется большое количество пользователей.

Это сообщение может появляться около ста раз в секунду, когда выполняется импорт пользователя. При наборе "id [username]" в терминале только один раз, это сообщение появляется около 10 раз в системном журнале.

Дальнейшие исследования показали, что nslcd, вероятно, связан с этим поведением. При запуске nslcd в режиме отладки можно увидеть следующие параметры подключения к серверу LDAP:

nslcd: [e8944a] <group=3000> DEBUG: ldap_initialize(ldapi:///localhost)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_rebind_proc()
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_PROTOCOL_VERSION,3)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_DEREF,0)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_TIMELIMIT,0)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_TIMEOUT,0)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_NETWORK_TIMEOUT,0)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_REFERRALS,LDAP_OPT_ON)
nslcd: [e8944a] <group=3000> DEBUG: ldap_set_option(LDAP_OPT_RESTART,LDAP_OPT_ON)
nslcd: [e8944a] <group=3000> DEBUG: ldap_simple_bind_s(NULL,NULL) (uri="ldapi:///localhost")

Так что, похоже, там отключено DEREF, но моя конфигурация slapd вообще не имеет никакой информации о DEREF, может, именно в этом причина проблемы?

Как можно избежать множественных сообщений о нераспознанных элементах управления?

1 ответ

ldap_set_option(LDAP_OPT_DEREF,0)

Это опция для разыменования псевдонима во время обработки операции поиска. Хорошо, что он отключен (по умолчанию). Но это здесь не актуально.

Как вы уже узнали, "1.3.6.1.4.1.4203.666.5.16" является OID так называемого управления разыменованием LDAP. Этот элемент управления можно использовать в поисковых запросах, чтобы позволить серверу возвращать данные из записей, на которые ссылается запись, найденная поиском.

В зависимости от ваших данных включение наложения slapo-deref в базе данных может помочь ускорить процесс, но приводит к многократной передаче данных (например, если пользователь является членом многих групп).

Кажется, что это можно отключить только при компиляции nss-pam-ldapd (он же nslcd).

Но ИМХО, это не главная проблема с производительностью. Вы должны рассмотреть возможность использования nscd(демон кэширования службы имен). В противном случае каждый запрос NSS к nslcd приведет к удаленному запросу поиска LDAP.

Вы можете также рассмотреть возможность использования sssd, потому что у него есть внутренняя архитектура кэширования, которая имеет свои плюсы и минусы. YMMV.

Другие вопросы по тегам