LDAP使用docker安装部署与使用

一、安装部署

本文采用docker容器的方式运行openldap镜像。使用docker的方式运行呢,省去了很多配置,比如集成nexus组件使用memberof属性时,最新镜像已经配置好,无需再对ldap进行配置直接使用即可,并且安装简单,

1、准备工作

(1)需要在本地虚拟机或者服务器中安装docker。
(2)在运行之前我们首先需要将openLDAP的docker镜像拉取到本地。使用命令。
docker pull osixia/openldap
此时拉取到的镜像就是最新版本的,如果要拉取指定版本的,则在上条命令中加入对应tag即可,如:
docker pull osixia/openldap:1.3.0
(3)还需要一个可视化的ldap管理工具,我使用的是phpldapadmin。同样使用docker pull命令拉取对应镜像。
docker pull osixia/phpldapadmin

2、运行镜像

(1)通过docker run命令运行
运行openLDAP

docker run \
-p 389:389 \
-p 636:636 \
--name your_ldap \
--network bridge \
--hostname openldap-host \
--env LDAP_ORGANISATION="example" \
--env LDAP_DOMAIN="example.com" \
--env LDAP_ADMIN_PASSWORD="123456" \
--detach osixia/openldap

其中 -p 389:389 \ TCP/IP访问端口,-p 636:636 \ SSL连接端口。

–name your_ldap 容器名称为your_ldap

–network bridge 连接默认的bridge网络(docker0)

–hostname openldap-host 设置容器主机名称为 openldap-host

–env LDAP_ORGANISATION=“example” 配置LDAP组织名称

–env LDAP_DOMAIN=“example.com” 配置LDAP域名

–env LDAP_ADMIN_PASSWORD=“youedata520” 配置LDAP密码

默认登录用户名:admin

运行结果如图:

docker Freeipa docker freeipa ldap_使用


运行osixia/phpldapadmin

docker run \
-d \
--privileged \
-p 8080:80 \
--name youe_pla \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=192.168.106.150 \
--detach osixia/phpldapadmin

-d 分离模式启动容器

–privileged 特权模式启动(使用该参数,container内的root拥有真正的root权限。

否则,container内的root只是外部的一个普通用户权限。)

–env PHPLDAPADMIN_HTTPS=false 禁用HTTPS

–env PHPLDAPADMIN_LDAP_HOSTS =192.168.106.150 配置openLDAP的IP或者域名,我的openLDAP是在本地192.168.106.150启动。

运行结果如图:

docker Freeipa docker freeipa ldap_docker_02

(2)使用docker-compose启动openLDAP
在openLDAP官方文档中提供了一份docker-compose启动文件,https://github.com/osixia/docker-openldap/blob/stable/example/docker-compose.yml,这种方法我没有测试,感兴趣的可以自己试一下。
(3)在k8s集群中运行,可参考https://github.com/osixia/docker-openldap官方文档中的配置。

使用(多图预警)

1、登录

在运行成功后访问运行成功的phpldapadmin,地址为:192.168.106.150:8080,如图所示

docker Freeipa docker freeipa ldap_部署_03


点击登录,用户名为cn=admin,dc=example,dc=com 密码:123456

docker Freeipa docker freeipa ldap_docker Freeipa_04

2、在界面新建组与用户

docker Freeipa docker freeipa ldap_LDAP_05

先创建一个组织单元比如创建一个产品部:

docker Freeipa docker freeipa ldap_docker Freeipa_06


docker Freeipa docker freeipa ldap_LDAP_07


docker Freeipa docker freeipa ldap_LDAP_08


然后在该部门中创建组,或者不在细分的话也可直接创建用户。为了演示我就都先创建组然后创建用户。

同样点击刚创建好的product部的条目,点击create a child entry,选择Posix Group,创建一个开发组。

docker Freeipa docker freeipa ldap_docker_09


docker Freeipa docker freeipa ldap_使用_10


docker Freeipa docker freeipa ldap_使用_11

在新建的组下添加用户,选中developmnt条目,创建子条目,选择User Account或Account,推荐使用User Account,因为User Account中包含了Account,还增加了更多的属性。

docker Freeipa docker freeipa ldap_使用_12


填写完之后提交,创建成功

docker Freeipa docker freeipa ldap_LDAP_13

此时该用户的dn为cn=zhang san,cn=development,ou=product,dc=example,dc=com,如果想使用uid来识别用户可以在界面中rename修改用户的dn。

docker Freeipa docker freeipa ldap_使用_14


docker Freeipa docker freeipa ldap_docker_15

3、在ldap中使用memberOf属性

在一些组件的继承中需要用到memberOf属性去同步用户的一些角色信息,但是posixGroup组并没有提供这个属性,所以我们需要新建一个拥有groupOfUniqueNames的用户组条目。

我们在product部门条目下创建一个拥有groupOfUniqueNames的用户组条目,第一步先选择创建子条目,第二部选择默认模板。

docker Freeipa docker freeipa ldap_使用_16


选择groupOfUniqueNames,点击下一步

docker Freeipa docker freeipa ldap_docker_17


docker Freeipa docker freeipa ldap_docker_18


rdn选择ou或者cn都可以(rdn:一般指dn逗号最左边的部分,如cn=zhang san,cn=development,ou=product,dc=example,dc=com中rdn为cn=zhang san。它与RootDN不同,RootDN通常与RootPW同时出现,特指管理LDAP中信息的最高权限用户。)

然后选择此组内包含的成员,点击这个搜索按钮,选择对应的人员,我们选择uid=zsan的用户。

docker Freeipa docker freeipa ldap_使用_19


docker Freeipa docker freeipa ldap_LDAP_20

注意填写改组的ou属性。

docker Freeipa docker freeipa ldap_docker Freeipa_21


然后点击创建。

点进admin的组中 我们就可以看到已经添加成功的uid=zsan的用户。

docker Freeipa docker freeipa ldap_使用_22


我们也可进入容器去进行验证。

进入容器

docker exec -it 容器id /bash/bin

使用命令:

ldapsearch -LL  -H ldapi:/// -D "cn=admin,dc=xxx,dc=xxx" -W "(uid=所要搜索的uid)" -b dc=xxx,dc=xxx memberOf

效果如下

docker Freeipa docker freeipa ldap_使用_23


如果未出现红框中结果,则未配置成功。

注意:当前docker安装的最新版的openLDAP默认开启了memberOf属性,如果是其他方式安装的openLDAP可以参考https://wandouduoduo.github.io/articles/53f92c3c.html

4、在界面使用LDIF 文件进行组与用户的创建。

docker Freeipa docker freeipa ldap_docker Freeipa_24

在界面选择import,可直接输入LDIF文件内容,也可导入对应的LDIF文件,如创建一个product部门下的deploy组。

docker Freeipa docker freeipa ldap_LDAP_25

创建成功

docker Freeipa docker freeipa ldap_LDAP_26


在deploy组下创建一个uid=lisi的人员

docker Freeipa docker freeipa ldap_docker_27


创建成功

docker Freeipa docker freeipa ldap_docker_28


LDIF文件可以从相似的条目中导出,然后稍作修改后进行创建。如图

docker Freeipa docker freeipa ldap_docker_29


docker Freeipa docker freeipa ldap_docker_30

docker Freeipa docker freeipa ldap_docker_31

参考文档:

https://wandouduoduo.github.io/articles/53f92c3c.html 讲解memberOf的使用
https://wiki.shileizcc.com/confluence/display/openldap/Docker+OpenLDAP 关于openLDAP很详细的一个网站
https://github.com/osixia/docker-openldap openldap github地址