You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenLDAP中赋予用户查询自身所属组的权限?

OpenLDAP权限配置:允许普通用户查询自身所属用户组

问题原因

普通用户tester执行查询返回32 No such object,是因为默认ACL限制了用户读取组条目及自身memberOf属性的权限,需要调整OpenLDAP的访问控制规则(ACL)来开放对应权限。

解决方案步骤

1. 备份当前配置(必做)

先备份cn=config配置目录,避免操作失误:

slapcat -n 0 -l openldap_config_backup.ldif

2. 配置ACL规则(动态配置方式,适用于现代OpenLDAP)

创建ACL更新的LDIF文件acl_update.ldif,添加以下规则:

dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.subtree="dc=example,dc=com"
  by dn.exact="cn=admin,dc=example,dc=com" write
  by self read
  by * none
-
add: olcAccess
olcAccess: to dn.subtree="dc=example,dc=com"
  filter="(objectClass=groupOfNames)"
  attrs=*,entry
  by dnattr=member read
  by * none
-
add: olcAccess
olcAccess: to dn.subtree="ou=people,dc=example,dc=com"
  filter="(objectClass=inetOrgPerson)"
  attrs=memberOf
  by self read
  by * none

执行LDIF文件应用配置:

ldapmodify -D cn=admin,dc=example,dc=com -w ${ADMIN_PW} -f acl_update.ldif

ACL规则说明

  • 第一条规则:允许管理员读写所有条目,普通用户仅能读取自身条目,其他用户无权限
  • 第二条规则:针对groupOfNames类型的组条目,允许该组member属性对应的用户读取组的所有属性及条目本身(确保能搜索到组)
  • 第三条规则:针对用户条目,允许用户自身读取memberOf属性

3. 确保memberOf反向属性正常工作(可选但必要)

如果用户条目没有自动生成memberOf属性,需要开启memberOf及refint覆盖模块来维护反向关联:

配置memberOf覆盖

创建memberof_overlay.ldif:

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la

dn: olcOverlay={0}memberof,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcMemberOfConfig
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

执行配置:

ldapmodify -D cn=admin,dc=example,dc=com -w ${ADMIN_PW} -f memberof_overlay.ldif

配置refint覆盖(保持数据一致性)

创建refint_overlay.ldif:

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: refint.la

dn: olcOverlay={1}refint,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
olcOverlay: refint
olcRefintAttribute: member memberOf

执行配置:

ldapmodify -D cn=admin,dc=example,dc=com -w ${ADMIN_PW} -f refint_overlay.ldif

4. 重启OpenLDAP服务(若需)

如果使用静态配置文件slapd.conf(旧版本),修改后需重启服务:

systemctl restart slapd

5. 测试普通用户查询

使用tester用户执行目标查询:

ldapsearch \
    -D "uid=tester,ou=people,dc=example,dc=com" \
    -w ${USER_PW} \
    -b 'dc=example,dc=com' \
    "(&(objectClass=groupOfNames)(member=uid=tester,ou=people,dc=example,dc=com))"

ldapsearch \
    -D "uid=tester,ou=people,dc=example,dc=com" \
    -w ${USER_PW} \
    -b 'dc=example,dc=com' \
    "(&(uid=tester)(objectClass=inetOrgPerson)(memberOf=ou=testingGroup,dc=example,dc=com))"

此时应能返回正确的组条目及用户的memberOf属性结果。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:44:55