ldap的group是一种单独的类型objectClass: groupOfNames, 有个字段叫做member, value就是entry的dn。如此,实现了group-user的映射关系。

我们可以通过group来查询member,然而,并不能通过user直接获取到group。这在配置第三方系统的时候,没办法做group认证,比如airflow要求输入group filter, 默认通过memberof的属性值来获取group。gitlab如果要做分组进行登录限制要求输入 memberof 的属性值来获取 group。所以,理论上user应该有个字段叫做memberof,value是group。

大家可能会觉得dn已经很明显的分组了好吧,为啥还要这么复杂。事实上,ldap也提供了Reverse Group Membership Maintenance.由系统来维护二者的映射关系。即

  • group添加member的时候会自动给对应的entry添加memberof字段

  • 当删除entry的时候,也会从group里删除member字段


添加 memberOf 模块

添加 add_module_group.ldif 文件 在不知道memberof.la文件在什么位置时(find / -name memberof.la)

dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap

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

应用ldap 配置

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f  add_module_group.ldif

添加 add_group_objectClass.ldif 文件,增加 objectClass 支持

dn: olcOverlay=memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member     
olcMemberOfMemberOfAD: memberOf

应用 ldap 配置

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_group_objectClass.ldif

新增 groupOfNames类型的组,add_group.ldif

dn: cn=gitlab-users,ou=Groups,dc=magic,dc=com
objectClass: groupOfNames
cn: gitlab-users
member: uid=xxx,ou=Users,dc=magic,dc=com

创建组

ldapmodify -a -H ldap://192.168.1.69:389 -D "cn=manager,dc=magic,dc=com" -w root123 -f addgroup.ldif

查看组

ldapsearch -H ldapi:/// -x -D "cn=manager,dc=magic,dc=com" -w root123 -b "ou=Groups,dc=magic,dc=com"
# gitlab-users, Groups, magic.com
dn: cn=gitlab-users,ou=Groups,dc=magic,dc=com
objectClass: groupOfNames
cn: gitlab-users
member: uid=xxx,ou=Users,dc=magic,dc=com

再来查看entry是否添加了memberof, ldapsearch当不指定字段的时候,默认返回全部强制字段,memberof不属于强制,需要单独指明

ldapsearch -H ldapi:/// -x -D "cn=manager,dc=magic,dc=com" -w root123 -b "ou=Users,dc=magic,dc=com" "(|(cn=xxx)(cn=gitlab*))" memberof

# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=magic,dc=com> with scope subtree
# filter: (|(cn=xxx)(cn=gitlab*))
# requesting: memberof 
#

# xxx, Users, magic.com
dn: uid=xxx,ou=Users,dc=magic,dc=com
memberOf: cn=gitlab-users,ou=Groups,dc=magic,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

完成

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐