共计 2180 个字符,预计需要花费 6 分钟才能阅读完成。
之前,我们已经通过 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: john.doe@example.com | |
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 的支持。
正文完
星哥玩云-微信公众号
