LDAP是Lightweight Directory Access Protocol的缩写,提供LDAP服务的软件有很多商业上获得成功的,其中以MS的AD和Redhat的NDS(Netscape directory server)使用最为广泛,而开源领域则是OpenLdap了,这篇文章使用docker版本的OpenLdap来搭建环境并进行确认。
本文使用osixia/openldap来进行演示,
拉取镜像:docker pull osixia/openldap:1.2.2
docker run --name my-openldap-container --detach osixia/openldap:1.2.2
这样我们就可以进入到运行起来的容器来确认相关信息了
可以看到OpenLDAP的版本相关信息,为本年度5月23日发布的版本
[root@platform ~]# docker ps |grep ldap
e444229214a5 osixia/openldap:1.2.2 "/container/tool/run" 24 hours ago Up 24 hours 389/tcp, 636/tcp my-openldap-container
[root@platform ~]# docker exec -it my-openldap-container sh
# ldapsearch -VV
ldapsearch: @(#) $OpenLDAP: ldapsearch (May 23 2018 04:25:19) $
Debian OpenLDAP Maintainers
(LDAP library: OpenLDAP 20444)
#
使用slaptest可以确认配置文件信息是否正确
# slaptest
config file testing succeeded
#
可以使用slapcat来查看相关的用户信息,缺省方式下已经有cn=admin的用户信息,详细结果如下
# slapcat -v
# id=00000001
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example
structuralObjectClass: organization
entryUUID: f8f7b81c-6a92-1038-9a4d-81d6b41cd327
creatorsName: cn=admin,dc=example,dc=org
createTimestamp: 20181022221004Z
entryCSN: 20181022221004.555004Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=org
modifyTimestamp: 20181022221004Z
# id=00000002
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RTBJMTlqaW1BTVlaZ0h2aEhPbm5YVVdWRmQxaEtBRnM=
structuralObjectClass: organizationalRole
entryUUID: f8f818b6-6a92-1038-9a4e-81d6b41cd327
creatorsName: cn=admin,dc=example,dc=org
createTimestamp: 20181022221004Z
entryCSN: 20181022221004.557498Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=org
modifyTimestamp: 20181022221004Z
#
更为常见的方式这是使用ldapsearch来进行查询
# ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example
# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RTBJMTlqaW1BTVlaZ0h2aEhPbm5YVVdWRmQxaEtBRnM=
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
#
当然也可以使用如下方式进行查询
ldapsearch -x -H ldap://`hostname` -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
另外这里的hostname也可以换成127.0.0.1,也可以使用容器分配的IP(172.17.0.3)
上面的对用户信息的确认是在容器内进行的,在宿主机上对其进行的访问则需要保证宿主机上也有诸如ldapsearch的连接方式,本文由于宿主机为centos7.4,所以这里只需要yum install openldap-clients即可。
[root@platform ~]# ldapsearch -x -H ldap://172.17.0.3 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example
# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RTBJMTlqaW1BTVlaZ0h2aEhPbm5YVVdWRmQxaEtBRnM=
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
[root@platform ~]#
LDAP一般用于SSO的单点登录,所以其他机器能够连接进行验证是最基础的,这篇文章为了简单演示,只是使用了容器的IP进行连接验证。
https://github.com/osixia/docker-openldap
http://www.openldap.org/doc/