我们使用LDAP来validation用户使用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
我们希望摆脱这些消息,而不用简单地重新configurationlogging。 因此,最好我们知道发生了什么事情,然后重新configuration系统,使得这些消息不再是首先产生的。 但如何分析这个?
问题是任何进程都可以执行一些触发系统执行身份validation操作的操作,并且在日志中看不到哪个进程正在触发身份validation操作。 有关如何分析这个的任何想法?
如果能够帮助和部署那些可执行文件,我可以在nslcd的源代码中添加额外的诊断代码。
我们使用的是旧的Ubuntu发行版:12.04,nss-pam-ldapd-0.8.4
更新:我创build了一个修改版本的nslcd,logging连接到它的应用程序的命令行。 这显然有很大的帮助。
从man 5 nslcd.conf
有效名称REGEX
该选项可用于指定在系统中如何validation用户名和组名。 此模式用于检查从LDAP请求并返回的所有用户名和组名。
正则expression式应该被指定为POSIX扩展正则expression式。 expression式本身需要用斜杠(/)字符分隔,并且可以在末尾附加'i'标志以指示匹配应该是大小写无关的。 默认值是/ ^ [a-z0-9。 @ $()]([a-z0-9。 @ $()\〜 – ] * [a-z0-9 ._ @ $()〜 – ])?$ / i
我假设你正在尝试请求一个用户名(里面有可能是某人认为文件通配符在用户名上起作用),或者来自ldap的响应信息包含一个带有“ ' 的用户 。
您可以尝试解决违规的用户名或更改validnames正则expression式,使其接受“*”作为有效的用户名。
请注意 ,这样做可能会导致意想不到的问题,尤其是在'*'用作expression式(如果没有正确转义或引用)的shell脚本中。