You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

LDAP搜索返回"No such object"问题排查与解决

LDAP普通用户无法搜索自身条目导致Phabricator认证失败

问题场景

我之前碰到过完全一样的情况:用LDAP管理员账号搜用户条目毫无问题,但用普通用户自己的账号执行相同搜索时,却返回No such object错误,直接导致Phabricator的LDAP认证卡壳。具体表现如下:

  • 管理员账号搜索命令(执行成功,返回1条结果):
    ldapsearch -h localhost -p 389 -b "dc=pieye,dc=org" "cn=Markus Proeller" -D "cn=admin,dc=pieye,dc=org" -W
    
  • 普通用户账号搜索命令(执行失败,返回result: 32 No such object):
    ldapsearch -h localhost -p 389 -b "dc=pieye,dc=org" "cn=Markus Proeller" -D "cn=Markus Proeller,ou=people,dc=pieye,dc=org" -W
    

问题根源

这个问题的核心是OpenLDAP的权限配置限制了普通用户读取目录条目,默认情况下普通用户可能没有足够权限搜索到自己的信息,进而导致认证流程失败。

解决步骤

通过修改OpenLDAP的olcAccess权限规则就能搞定,具体操作如下:

  1. 新建一个ldap.ldif文件,写入以下配置内容:
    dn: olcDatabase={1}hdb,cn=config
    changetype: modify
    delete: olcAccess
    -
    add: olcAccess
    olcAccess: to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=pieye,dc=org" write by anonymous auth by * none
    olcAccess: to * by self write by dn="cn=admin,dc=pieye,dc=org" write by users read by * none
    
  2. 执行命令将配置应用到LDAP服务器:
    ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f ldap.ldif
    

配置说明

这个权限规则的逻辑很明确:

  • 针对userPasswordshadowLastChange这类敏感属性:仅允许用户自身修改,管理员也有写入权限,匿名用户只能用于认证,其他用户完全无权限
  • 针对所有其他条目和属性:允许用户自身修改,管理员拥有完全读写权限,同时开放所有普通用户的只读权限,这样普通用户就能正常搜索到自己的条目了

配置完成后,再用普通用户账号执行搜索命令就能得到和管理员一样的结果,Phabricator的LDAP认证也能正常运行了。

内容的提问来源于stack exchange,提问作者Markus

火山引擎 最新活动