OpenLDAP 添加groupOfUniqueNames属性

一、前言

默认情况下OpenLDAP的用户组属性是posixGroup,posixGroup用户组和用户没有实际的对应关系。如果需要把posixGroup和user关联起来则需要将用户添加到对应的组中。 通过如上配置可以满足大部分业务场景,但是如果需要通过用户组来查找用户的话(比如:nginx与openldap集成过滤用户组时、proftpd与openldap集成过滤用户组时、openvpn与openldap集成过滤用户组时、gitlab与openldap集成过滤用户组时),posixGroup用户组属性,是无法满足要求的。此时需要使用OpenLDAP的groupOfUniqueNames用户组属性。这里主要介绍如何为OpenLDAP启用MemberOf

二、环境

OpenLDAP版本为2.4.44

三、实现步骤

3.1 查看openldap的数据库信息

1
[admin@localhost ~]$ ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

或者直接查看数据库目录

1
[admin@localhost ~]$ sudo ls /etc/openldap/slapd.d/cn=config/

得到的结果大概如下

cn=schema olcDatabase={0}config.ldif olcDatabase={1}monitor.ldif
cn=schema.ldif olcDatabase={-1}frontend.ldif olcDatabase={2}hdb.ldif

其中有一个带什么db.ldif的就是你最终需要修改的数据库文件,我这里是hdb.ldif,你的可能是db.ldif,还有人是bdb.ldif,不管什么db,总之要改的是一个叫db的文件就对了。

3.2 加载memberof模块

添加模块ldif文件

1
2
3
4
5
6
7
8
9
10
[admin@localhost ~]$ vim add_module_group.ldif 
dn: cn=module{0},cn=config
cn: module
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap

dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof.la
1
2
3
4
5
6
7
8
9
10
11
12
[admin@localhost ~]$ vim add_group_objectClass.ldif 
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

groupOfUniqueNames #由centos 6 的groupOfNames 变更为了centos 7的groupOfUniqueNames
uniqueMember #centos 6用户的属性的名称从member变成了uniqueMember

将ldif文件写入openldap,使用root权限执行

1
2
[admin@localhost ~]$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_module_group.ldif
[admin@localhost ~]$ sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_group_objectClass.ldif

3.3 添加主机架构和相应的主机组

添加ldif文件

1
2
3
4
5
6
7
[admin@localhost ~]$ vim add_unique_group.ldif 
dn: cn=nginx,ou=groups,dc=sys,dc=com
objectClass: top
objectClass: groupOfUniqueNames
cn: nginx
uniqueMember: uid=dev1,ou=dev,ou=users,dc=sys,dc=com
uniqueMember: uid=ops1,ou=ops,ou=users,dc=sys,dc=co

将ldif文件写入openldap

1
[admin@localhost ~]$ ldapadd -x -D cn=admin,dc=sys,dc=com -W -f add_unique_grou.ldif

配置完成后再Openldap服务端执行下述语句应能正常查询到相应的memberOf属性

1
2
3
4
[admin@localhost ~]$ ldapsearch -x -LLL -H ldap:/// -D cn=admin,dc=sys,dc=com -W -b uid=ops1,ou=ops,ou=users,dc=sys,dc=com memberOf
Enter LDAP Password:
dn: uid=ops1,ou=ops,ou=users,dc=sys,dc=com
memberOf: cn=nginx,ou=groups,dc=sys,dc=com
-------------本文结束感谢您的阅读-------------