Solaris 11服务器getent passwd仅显示OpenLDAP中People OU下用户的问题求助
问题描述
我已经把Solaris 11服务器和OpenLDAP服务器连接成功了,连接状态正常——用ldaplist命令能看到搜索基准下的所有LDAP用户,输出如下:
dn: cn=user_1,dc=IT,dc=my-company,dc=com dn: cn=user_2,dc=IT,dc=my-company,dc=com dn: cn=user_3,dc=IT,dc=my-company,dc=com dn: ou=People,dc=IT,dc=my-company,dc=com
但getent passwd命令只返回ou=People下的用户,而且如果修改这个OU的名称,就完全返回不了用户了。我从来没配置过让ldapclient或者getent passwd限定在ou=People下,而且ldapclient生成的ldap_client_file配置文件里也没指定这个OU:
NS_LDAP_SERVERS= my-companies-ldap-server.com:636 NS_LDAP_SEARCH_BASEDN= dc=IT,dc=my-company,dc=com NS_LDAP_AUTH= tls:simple NS_LDAP_CACHETTL= 0 NS_LDAP_CREDENTIAL_LEVEL= proxy
有没有人能给我点排查思路?谢谢!
可能的排查方向和解决办法
我之前遇到过类似的问题,给你几个可以尝试的方向:
检查
nsswitch.conf配置:getent是通过/etc/nsswitch.conf读取用户信息的,先看看里面passwd条目有没有针对LDAP的额外限制。比如有些情况下Solaris会默认给LDAP的passwd查询加上路径限定,你可以查看passwd行是否类似:passwd: files ldap如果有
ldap:ou=People这类参数,那就是这里限制了范围;如果没有,接着往下排查。查看ldapclient完整配置:
ldap_client_file只是基础配置,你可以用ldapclient list命令查看更详细的客户端设置,重点看搜索路径(Search Path)和过滤器(Filter)相关参数。Solaris的LDAP客户端默认可能会对posixAccount(对应passwd的对象类)预设ou=People作为搜索范围,即使你没在基础配置里指定。如果发现有这样的默认配置,可以用ldapclient modify命令调整:ldapclient modify -a defaultSearchBase=dc=IT,dc=my-company,dc=com或者直接修改针对passwd的搜索过滤器,去掉
ou=People的限定。用ldapsearch模拟查询:直接用
ldapsearch命令模拟getent的查询逻辑,验证是否能返回所有用户:ldapsearch -x -b dc=IT,dc=my-company,dc=com -H ldaps://my-companies-ldap-server.com:636 '(objectClass=posixAccount)'如果这个命令能返回所有用户,说明问题出在Solaris的NSS(名称服务切换)配置上;如果只能返回
ou=People下的用户,那可能是OpenLDAP服务器端的ACL限制,但你用ldaplist能看到所有用户,大概率还是客户端的问题。检查LDAP客户端profile配置:Solaris的ldapclient可能使用了默认profile(比如
default或nis),这些profile里可能预设了ou=People作为用户搜索路径。你可以用ldapclient show -v查看profile的详细设置,如果是这个原因,可以创建自定义profile,修改搜索路径后再应用。
希望这些思路能帮你解决问题!
备注:内容来源于stack exchange,提问作者Marvin Stelter




