修复多个slap_global_control:无法识别的控件:在系统日志中

时间:2018-10-26 08:43:52

标签: ldap slapd

在使用LDAP进行用户身份验证的debian 8服务器上(已安装slapd,libpam-ldapd和nslcd),每次系统需要在LDAP中查找用户信息时(例如键入id),我都会多次在syslog中收到以下消息。 [用户名],或设置文件夹的权限等)

slap_global_control: unrecognized control: 1.3.6.1.4.1.4203.666.5.16

此控件显然是deref控件。我找不到任何有关的信息,除了在将LDAP数据库存储在多台服务器上时非常有用。我的机器上从来没有这种情况。我从未在任何地方自觉激活该控件。

这会使系统在某些情况下极慢,例如当用户导入脚本正在运行并导入大量用户时。

正在运行用户导入时,该消息每秒可能会出现一百次。在终端中仅键入一次“ id [用户名]”时,此消息在syslog中显示约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,但是我的拍打配置根本没有有关DEREF的信息,也许这是引起问题的原因?

如何避免有关无法识别的控件的多个消息?

1 个答案:

答案 0 :(得分:2)

  

ldap_set_option(LDAP_OPT_DEREF,0)

这是dereferencing an alias的一个选项,用于处理搜索操作。最好将其禁用(默认情况下)。但这与这里无关。

您已经发现“ 1.3.6.1.4.1.4203.666.5.16”是所谓的LDAP Dereference Control的OID。可以在搜索请求中使用此控件,以使服务器从由搜索找到的条目引用的条目中返回数据。

根据您的数据在数据库中启用覆盖 slapo-deref 可以帮助加快处理速度,但是会导致数据被多次传输(例如,如果用户是多个组的成员)。

似乎只有在编译 nss-pam-ldapd (又名 nslcd )时才能将其关闭。

但是恕我直言,这不是您的主要性能问题。您应该考虑使用 nscd (名称服务缓存守护程序)。否则,每个对 nslcd 的NSS请求都会导致远程发送LDAP搜索请求。

您还可以考虑使用 sssd ,因为它具有内部缓存体系结构,该体系结构具有优缺点。 YMMV。