Docker快速搭建LDAP服务器
# 摘要
OpenLdap可以提供强大的集中账号管理和授权,但其强大的功能依赖多个插件的集成,为方便OpenLdap的编译和部署,我便制作了一个docker 镜像,并通过本文记录该镜像的使用方法。
# 文档环境
(opens new window)
(opens new window)
- 本文档中代码的测试环境
# OpenLdap Docker 部署
# 获取镜像
# 建议使用国内加速
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors" : [
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}
EOF
docker push nginxbar/ldapsso:0.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 容器启动
docker run -p 389:389 -p 636:636 --name ldapsso --detach nginxbar/ldapsso:0.2
1
# 自定义ldap域
镜像默认的ldap域是nginxbar,根域是dc=nginxbar,dc=com,自定义域可用如下方式修改
docker run -p 389:389 -p 636:636 \
-e DOMAIN=ldapsso \
-e BASE_DN=dc=ldapsso,dc=com \
--name ldapsso --detach nginxbar/ldapsso:0.2
1
2
3
4
2
3
4
# 修改管理员及密码
通过环境变量 ADMIN 及 CONFIG_PASS 修改管理员账号及密码
docker run -p 389:389 -p 636:636 \
-e ADMIN=superadmin \
-e CONFIG_PASS=admin \
--name ldapsso --detach nginxbar/ldapsso:0.2
1
2
3
4
2
3
4
# AD 域集成
镜像已经配置好AD 集成的环境,在使用时,只需配置好AD域的相关参数即可。
docker run -p 389:389 -p 636:636 \
-e AD_SERVER=xxx.xxx.xxx.xxx \
-e AD_BASE_DN=DC=office,DC=nginxbar,dc=com \
-e AD_BIND_DN=CN=admin,CN=Users,DC=office,DC=nginxbar,dc=com \
-e AD_PASSWD=abcdefg --detach nginxbar/ldapsso:0.2
1
2
3
4
5
2
3
4
5
# 密码修改
镜像集成了一个自修改密码的web程序,通过8080端口直接访问。
docker run -p 389:389 -p 636:636 -p 8080:8080 --name ldapsso --detach nginxbar/ldapsso:0.2
1
密码修改依赖openldap 的acl配置,配置样例如下
docker exec -it ldapsso /bin/sh
cat <<EOF >/tmp/acl.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,mail,givenName,displayName,homePhone,telephoneNumber,sshPublicKey
by self write
by anonymous read
by * none
olcAccess: to *
by self read
by anonymous read
EOF
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f /tmp/acl.ldif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# docker-compose 脚本
version: '3.3'
services:
ldapsso:
hostname: ldapsso
image: nginxbar/ldapsso:0.2
container_name: ldapsso
ports:
- 389:389
- 636:636
- 8080:8080
environment:
- HOSTNAME=localhost
- LOG_LEVEL=256
- ADMIN=root
- CONFIG_PASS=admin
- DOMAIN=ldapsso
- BASE_DN=dc=ldapsso,dc=com
- AD_SERVER=xxx.xxx.xxx.xxx
- AD_BASE_DN=DC=office,DC=nginxbar,DC=com
- AD_BIND_DN=CN=admin,CN=Users,DC=office,DC=nginxbar,dc=com
- AD_PASSWD=abcdefg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# openldap 客户端安装
# 首选确认镜像端口8080 可以被外部访问
docker run -p 389:389 -p 636:636 -p 8080:8080 --name ldapsso --detach nginxbar/ldapsso:0.2
# 在Centos 客户机执行如下命令,xxx.xxx.xxx.xxx 为openldap服务器IP
echo "xxx.xxx.xxx.xxx ldap.nginxbar.com" >>/etc/hosts
wget http://ldap.nginxbar.com:8086/scripts/ldapclient.sh -O /tmp/ldapclient.sh && sh /tmp/ldapclient.sh
1
2
3
4
5
6
7
2
3
4
5
6
7
# 参考文档
https://hub.docker.com/repository/docker/nginxbar/ldapsso
上次更新: 2022/12/05, 22:29:05