背景
LDAP的英文全称是Lightweight Directory Access Protocol,称为轻量级的目录访问协议。项目中可用于存储用户信息数据,如翼MR中的LDAP组件,可存储用户与用户组的关系。
LDAP组件默认提供一种类型groupOfNames,可以根据用户组查询关联用户的功能。但在实际开发中,需要根据用户名就知道所属的用户组,而不用再做一次查询。LDAP官方提供了Reverse Group Membership Maintenance,由系统来维护user与group的关系,默认属性名为memberOf。实现原理为:
- 当向group中添加用户时,会更新用户的memberOf属性。
- 当删除用户时,会从相关的group中,删除该用户。
操作指引
本文介绍如果在LDAP中,增加memberOf插件,实现根据用户名查询所属用户组的功能。操作指引如下:
- 查询olcDatabase的值。
ls /etc/openldap/slapd.d/cn=config/
查看以*db.ldif结尾的文件名,例如{2}mdb.ldif。 - 新增以下两个文件。
memberOf.ldif
dn: cn=module,cn=config
changetype: add
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: memberof.la
overlay.ldif
dn: olcOverlay=memberof,olcDatabase={2}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: memberof
olcMemberOfRefInt: TRUE
- 执行添加命令
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberOf.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f overlay.ldif
功能验证
#修改用户所属组后,查看memberOf是否生效
ldapsearch -LL -Y EXTERNAL -H ldapi:``/// "(uid=user01)" -b dc=chinatelecom,dc=cn memberOf