未配置binddn和bindpw的nslcd为何能无认证访问OpenLDAP
问题原因
OpenLDAP 默认允许匿名用户读取目录树基础属性,你配置的 olcAccess 规则优先级或范围有误是核心原因:
- OpenLDAP 访问规则是从上到下匹配,命中第一条符合条件的规则就直接生效。如果你的
olcAccess配置里没有显式限制匿名用户权限,或者把匿名可读的规则放在了权限限制规则前面,就会允许匿名用户拉取用户uid、密码哈希等认证必要属性,nslcd 不需要绑定账号即可完成身份校验流程。 - 如果你开启了 LDAPv2 兼容配置(
olcAllows: bind_v2),旧版本协议的匿名绑定逻辑更宽松,也会出现无需显式配置 binddn 即可访问的情况。
遗漏的配置项
服务端调整配置
- 修正
olcAccess规则,显式限制匿名权限,示例配置如下:
dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=example,dc=com" write by anonymous auth by * none olcAccess: {1}to * by dn="cn=admin,dc=example,dc=com" write by users read by * none
上述规则第一条限定匿名用户仅能执行认证绑定操作,不能读取其他属性;第二条要求所有目录内容必须完成身份认证后才能读取。
2. 显式关闭匿名绑定:
dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon - add: olcRequires olcRequires: authc
客户端补全配置
在 /etc/nslcd.conf 中添加绑定账号信息:
binddn cn=admin,dc=example,dc=com bindpw 你的绑定账号密码
配置完成后重启 nslcd 服务,未配置绑定账号的客户端就会被OpenLDAP拒绝访问,无法拉取用户信息完成认证。
内容的提问来源于stack exchange,提问作者Ch Sai Manoj
相关产品推荐
相关产品推荐

