本文主要介绍openldap
的部署和go-ldap-admin
的配置方法
1.部署Ldap
这里我们使用由VMware维护的项目:https://hub.docker.com/r/bitnami/openldap
1 2 3 4
| docker pull bitnami/openldap:2.6.8; docker volume create vo-ldap; docker run -dit --restart=always -p 389:1389 -p 636:1636 -v vo-ldap:/bitnami/openldap/ -e LDAP_ENABLE_TLS=no -e LDAP_ADMIN_USERNAME="admin" -e LDAP_ADMIN_PASSWORD="ldap_admin密码" -e LDAP_ROOT="dc=xxxx,dc=com" -e LDAP_ADMIN_DN="cn=admin,dc=xxxx,dc=com" -e LDAP_USERS=demo_user -e LDAP_PASSWORDS=demo_PWD3 -e LDAP_USER_DC=people -e LDAP_PASSWORD_HASH="{SSHA}" --name openldap bitnami/openldap:2.6.8;
|
注意,
LDAP_USER_DC
需要使用people
,不要修改。原因是下面的go-ldap-admin
默认使用people
LDAP_PASSWORD_HASH
使用SSHA
,其实默认的也是SSHA,可以不必指定
LDAP_ADMIN_USERNAME
,指定admin,不要修改,原因是下面的go-ldap-admin
可能无法兼容
- 这里没有配置TLS加密,考虑到ldap本身的弱安全性,且ldap通常配置在企业内网,这里就不提高复杂度了。
2.部署管理端
这里我们使用go-ldap-admin这个项目,相比phpAdmin更好用。
同时,我们的核心诉求是为用户提供自定义修改密码的能力。
官方站点:https://ldapdoc.eryajf.net/
官方GitHub:https://github.com/eryajf/go-ldap-admin
官方DockerHub:https://hub.docker.com/r/eryajf/go-ldap-admin/tags
2.1.部署go-ldap-admin
1 2 3
| docker volume create vo-go-ldap-admin; docker pull eryajf/go-ldap-admin:2024-06-07_14-49; docker run -dit --restart=always -p 18888:8888 -v vo-go-ldap-admin:/app -e DB_DRIVER=mysql -e MYSQL_HOST=你的mysql地址 -e MYSQL_PORT=你的mysql端口 -e MYSQL_USERNAME=你的mysql账号 -e MYSQL_PASSWORD=你的mysql密码 -e MYSQL_DATABASE=你的mysqldb -e LDAP_URL=ldap://你的ldap地址:389 -e LDAP_BASE_DN="dc=xxxx,dc=com" -e LDAP_ADMIN_DN="cn=admin,dc=xxxx,dc=com" -e LDAP_ADMIN_PASS="ldap的admin密码" -e LDAP_USER_DN="ou=people,dc=xxxx,dc=com" -e LDAP_USER_INIT_PASSWORD="默认所有ldap用户的密码,例如123456" -e LDAP_DEFAULT_EMAIL_SUFFIX="xxxx.com" -e LDAP_USER_PASSWORD_ENCRYPTION_TYPE="ssha" eryajf/go-ldap-admin:2024-06-07_14-49
|
2.2.核心参数说明
核心要配置三类参数:
- 关联的ldap基础信息
- MySQL信息
- 第三方账号同步的accessKey(例如钉钉、企微、飞书)
ldap信息和mysql信息已经通过docker运行时环境变量进行了配置。
而第三方信息,由于原作者没有写docker环境变量,所以目前只能修改config.yml文件参数,基本参数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| dingtalk: flag: "dingtalk" app-key: "xxxxxxxxxxxxxxx" app-secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" agent-id: "12121212" enable-sync: false dept-sync-time: "0 30 2 * * *" user-sync-time: "0 30 3 * * *" dept-list: is-update-syncd: false user-leave-range: 0
|
config.yml文件已经通过volume vo-go-ldap-admin映射到本地,可以动过docker volume inspect vo-go-ldap-admin
找到目录,并修改config.yml
2.3.核心操作
你需要如下几个操作:
- 手动同步三方(钉钉/企微/飞书)根节点到ldap
- 修改用户信息的字段映射。因为当前项目是将用户名的拼音作为userName,这可能会出现异常,请根据你的实际情况修改,推荐
custom_nickname_org_email
,也就是邮箱前缀
- 再同步账户信息
手动同步根节点,如下图,如果你看不见同步按钮,多刷新几次页面就出来了
修改字段映射,如下图,推荐custom_nickname_org_email
,也就是邮箱前缀:
最终,在用户管理里同步用户信息到ldap:
2.4.常见问题
2.4.1.同步部门报错
报错:DsyncDingTalkDepts添加部门失败: 添加部门: caiwu, 失败: LDAP Result Code 32 No Such Object,这是因为ldap里没有部门根节点,需要参照2.3.核心操作里,先同步部门
2.4.2.同步用户报错
一般报错是No Such Object,这是因为go-ldap-admin这个项目的用户同步ou是people,需要在ldap服务器里配置,或者参照第一步部署ldap服务时的参数配置1.部署Ldap里,配置LDAP_USER_DC为people
参考资料:
- bitnami/openldap:https://hub.docker.com/r/bitnami/openldap
- 我花了一个五一终于搞懂了OpenLDAP:https://segmentfault.com/a/1190000014683418
- 捋透openLDAP的基础概念:https://ldapdoc.eryajf.net/pages/17ba17/#前言
- Go-Ldap-Admin:https://ldapdoc.eryajf.net/pages/17ba17/#前言