30

启用OpenLDAP的memberOf特性

 4 years ago
source link: https://www.linuxprobe.com/enable-memberof-openldap.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

之前,我们已经通过 Docker 的方式安装部署了 OpenLDAP 服务。所以本文将主要介绍如何启用 OpenLDAP 中非常有用的 memberOf 特性。

很多场景下,我们需要快速的查询某一个用户是属于哪一个或多个组的(member of)。memberOf 正是提供了这样的一个功能:如果某个组中通过 member 属性新增了一个用户,OpenLDAP 便会自动在该用户上创建一个 memberOf 属性,其值为该组的 dn。

遗憾的是,OpenLDAP 默认并不启用这个特性,因此我们需要通过相关的配置开启它。

创建一个支持 memberOf 的 Docker 镜像

我们的思路是以 osixia/openldap 为基准,通过 Dockerfile 来扩展其启动脚本,来实现对 memberOf 的支持。

首先,我们需要修改原镜像中的 bootstrap/ldif/03-memberOf.ldif 脚本中的 olcMemberOfGroupOC 和 olcMemberOfMemberAD 属性,结果如下:

# Load memberof module
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: memberof

# Backend memberOf overlay
dn: olcOverlay={0}memberof,olcDatabase={1},cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: {0}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

接着我们来创建一个如下的 Dockerfile,将修改后的脚本文件加入到新的镜像中:

FROM osixia/openldap
MAINTAINER Yanbin Ma 
ENV LDAP_ORGANISATION="XINHUA.IO" LDAP_DOMAIN="xinhua.io" LDAP_ADMIN_PASSWORD="Passw0rd"
ADD bootstrap /container/service/slapd/assets/config/bootstrap

然后通过如下命令,便可以构建出新的镜像 myanbin/openldap:

$ docker build -t myanbin/openldap:0.1.0 .

最后运行此镜像即可:

$ docker run --name ldap_core -p 389:389 -p 636:636 --detach myanbin/openldap
使用 LDIF 文件导入用户和组数据

首先我们导入一个用户:

[[email protected] ~]# vim add_user.ldif
dn: uid=john,ou=people,dc=xinhua,dc=io
cn: John Doe
givenName: John
sn: Doe
uid: john
uidNumber: 5000
gidNumber: 1000
userPassword: {SHA}M6XDJwA47cNw9gm5kXV1uTQuMoY=
homeDirectory: /home/john
mail: [email protected]
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
[[email protected] ~]# ldapadd -x -H ldap://172.16.168.120 -D "cn=admin,dc=xinhua,dc=io" -W -f ./add_user.ldif
然后再导入一个组:
[[email protected] ~]# vim add_group.ldif
dn: cn=master,ou=group,dc=xinhua,dc=io
objectClass: groupOfNames
cn: master
member: uid=john,ou=people,dc=xinhua,dc=io
[[email protected] ~]# ldapadd -x -H ldap://172.16.168.120 -D "cn=admin,dc=xinhua,dc=io" -W -f ./add_group.ldif

最后通过 ldapsearch 命令可以查询到,该用户属性中已经增加了 memberOf:

[[email protected] ~]# ldapsearch -x -H ldap://172.16.168.120 -b dc=xinhua,dc=io -D "cn=admin,dc=xinhua,dc=io" -W memberOf
dn: uid=john,ou=people,dc=xinhua,dc=io
memberOf: cn=master,ou=group,dc=xinhua,dc=io

最终,我们用上面的方式实现了对 memberOf 的支持。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK