之前,我们已经通过 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 文件导入用户和组数据
首先我们导入一个用户:
[root@localhost ~]# 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
[root@localhost ~]# ldapadd -x -H ldap://172.16.168.120 -D "cn=admin,dc=xinhua,dc=io" -W -f ./add_user.ldif 然后再导入一个组: [root@localhost ~]# 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
[root@localhost ~]# ldapadd -x -H ldap://172.16.168.120 -D "cn=admin,dc=xinhua,dc=io" -W -f ./add_group.ldif
最后通过 ldapsearch 命令可以查询到,该用户属性中已经增加了 memberOf:
[root@localhost ~]# 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 的支持。
原文来自:https://www.linuxprobe.com/enable-memberof-openldap.html