OpenLDAP中基于gidNumber的多组用户查询及用户加入多组方法咨询
刚上手OpenLDAP的时候,确实容易被用户和组的关联逻辑搞混,我来一步步帮你解决这两个问题:
一、如何将用户添加至多个组
首先要明确:posixAccount里的gidNumber是用户的主组(Primary Group),它确实是单值属性,只能指定一个组。如果要让用户同时属于多个组,需要借助posixGroup对象类的memberUid属性——这个属性是多值的,可以给一个组添加多个用户,也可以让一个用户被多个组引用。
具体操作步骤:
- 确保你的组条目使用
posixGroup对象类(这是OpenLDAP中管理用户组的标准类) - 针对每个需要添加用户的组,在组的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
相关产品推荐
相关产品推荐

