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

OpenLDAP中基于gidNumber的多组用户查询及用户加入多组方法咨询

刚上手OpenLDAP的时候,确实容易被用户和组的关联逻辑搞混,我来一步步帮你解决这两个问题:

一、如何将用户添加至多个组

首先要明确:posixAccount里的gidNumber是用户的主组(Primary Group),它确实是单值属性,只能指定一个组。如果要让用户同时属于多个组,需要借助posixGroup对象类的memberUid属性——这个属性是多值的,可以给一个组添加多个用户,也可以让一个用户被多个组引用。

具体操作步骤:

  1. 确保你的组条目使用posixGroup对象类(这是OpenLDAP中管理用户组的标准类)
  2. 针对每个需要添加用户的组,在组的LDAP条目中添加memberUid: <用户的uid>属性(一个组可以添加多个memberUid值,对应多个用户)

举个实际的例子:
假设用户john的LDIF条目是:

dn: uid=john,ou=users,dc=example,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
uid: john
gidNumber: 1000  # 这是john的主组
cn: John Doe
sn: Doe
homeDirectory: /home/john

要把john同时加入dev和qa两个组,对应的组LDIF条目可以这么写:

dn: cn=dev,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: dev
gidNumber: 1001
memberUid: john  # 将john添加到dev组

dn: cn=qa,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: qa
gidNumber: 1002
memberUid: john  # 将john添加到qa组

这样配置后,john就同时属于主组1000,以及附属组dev和qa了。

二、基于gidNumber编写搜索过滤条件获取多组用户列表

这里分两种常见场景,对应不同的过滤逻辑:

1. 获取主组为多个gidNumber的用户

如果你的需求是找出所有主组是指定几个gid的用户,直接用逻辑或组合多个gidNumber条件即可:

(|(gidNumber=1001)(gidNumber=1002))

结合用户对象类的完整过滤式(避免搜到非用户条目):

(&(objectClass=posixAccount)(|(gidNumber=1001)(gidNumber=1002)))

2. 获取所有属于多个组(含主组和附属组)的用户

如果需要包含附属组的用户,推荐先给OpenLDAP启用memberOf overlay——这个扩展会自动维护用户的memberOf属性,指向用户所属的所有组(包括主组和附属组)。启用后,就可以用memberOf来组合过滤条件:

(&(objectClass=posixAccount)(|(gidNumber=1001)(gidNumber=1002)(memberOf=cn=dev,ou=groups,dc=example,dc=com)(memberOf=cn=qa,ou=groups,dc=example,dc=com)))

如果暂时没法启用memberOf overlay,也可以分两步搜索:

  • 第一步:搜索目标组,提取所有memberUid值,过滤式为:(&(objectClass=posixGroup)(|(cn=dev)(cn=qa)))
  • 第二步:用第一步得到的uid列表搜索用户,过滤式类似:(&(objectClass=posixAccount)(|(uid=john)(uid=jane)...))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:14:10