OpenLDAP启用MemberOf

目的

默认情况下OpenLDAP的用户组属性是Posixgroup,Posixgroup用户组和用户没有实际的对应关系。如果需要把Posixgroup和user关联起来则需要将用户添加到对应的组中。 通过如上配置可以满足大部分业务场景,但是如果需要通过用户组来查找用户的话,Posixgroup用户组属性,是无法满足要求的。此时需要使用OpenLDAP的groupOfUniqueNames用户组属性。本篇文章Fayson主要介绍如何为OpenLDAP启用MemberOf。

环境

OpenLDAP版本为2.4.44

步骤

先查看openldap的数据库信息

1
2
3
ls /etc/openldap/slapd.d/cn=config/
或者
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

得到的结果大概如下,不一样也不要害怕:

1
cn=module{0}.ldif cn=schema/ cn=schema.ldif olcDatabase={0}config.ldif olcDatabase={-1}frontend.ldif olcDatabase={1}monitor.ldif olcDatabase={2}bdb/ olcDatabase={2}bdb.ldif

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

准备memberof_conf.ldif文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim memberof_conf.ldif

#开启memberof支持
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

#新增用户支持memberof配置
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

编辑refint1.ldif文件

1
2
3
4
5
vim refint1.ldif 

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

编辑refint2.ldif文件

1
2
3
4
5
6
7
8
9
10
 vim refint2.ldif 

dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof member manager owner
#olcRefintAttribute: memberof uniqueMember manager owner

导入配置

1
2
3
4
#注意:导入时文件路径跟绝对路径
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /data/disk1/openladp/memberof_conf.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /data/disk1/openladp/refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /data/disk1/openladp/refint2.ldif

以上步骤就完成了OpenLDAP的MemberOf模块启用。

验证

验证一下配置,这个命令可以列出所有配置

1
slapcat -b cn=config

创建用户测试

1, 创建一个测试用户cdsw_a,ldif文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim cdsw_user.ldif

dn: uid=cdsw_a,ou=People,dc=fayson,dc=com
uid: cdsw_a
cn: cdsw_a
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: 123456
shadowLastChange: 17694
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/cdsw_a

2, 执行如下命令将cdsw_a用户导入到OpenLDAP中

1
ldapadd -D "cn=Manager,dc=fayson,dc=com" -W -x -f cdsw_user.ldif

3, 创建一个新的groupOfUniqueNames用户组,并把cdsw_a用户添加到该组

1
2
3
4
5
6
vim cdsw_group.ldif 

dn: cn=cdsw_admin,ou=Group,dc=fayson,dc=com
objectClass: groupOfUniqueNames
cn: cdsw_admin
uniqueMember: uid=cdsw_a,ou=People,dc=fayson,dc=com

  1. 将cdsw_admin组添加到OpenLDAP中

  1. 通过命令查看用户所属组,命令如下
1
ldapsearch -LL -Y EXTERNAL -H ldapi:/// "(uid=cdsw_a)" -b dc=fayson,dc=com memberOf

总结

在OpenLDAP中配置启用MemberOf时需要注意配置文件的通配符{0}/{2},这个数字不是随意指定的而是根据当前的/etc/openldap/slapd.d/cn=config/生成的内容得出

搜索例子

1
2
3
4
5
# docker openldap
docker exec xxxx ldapsearch -x -D "cn=admin,dc=xxxx,dc=com" -w "xxxx" -b "dc=xxxx,dc=com" "cn=*"

#现在默认用docker安装openldap是开启了memberof,所以直接添加用户,添加用户组后,直接用下面命令验证
ldapsearch -LL -H ldapi:/// -D "cn=admin,dc=xxx,dc=net" -W "(uid=sunxu)" -b dc=xxx,dc=net memberOf

-------------本文结束感谢您的阅读-------------

本文标题:OpenLDAP启用MemberOf

文章作者:WanDouDuoDuo

发布时间:2019年08月28日 - 14:08

最后更新:2019年11月01日 - 18:11

原始链接:https://wandouduoduo.netlify.com/articles/53f92c3c.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

原创技术分享,您的支持将鼓励我继续创作