部署OpenLdap
本文主要介绍openldap
的部署和go-ldap-admin
的配置方法
1.部署Ldap
这里我们使用由VMware维护的项目:https://hub.docker.com/r/bitnami/openldap
1 | # 安装 |
注意,
LDAP_USER_DC
需要使用people
,不要修改。原因是下面的go-ldap-admin
默认使用peopleLDAP_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 | docker volume create vo-go-ldap-admin; |
2.2.核心参数说明
核心要配置三类参数:
- 关联的ldap基础信息
- MySQL信息
- 第三方账号同步的accessKey(例如钉钉、企微、飞书)
ldap信息和mysql信息已经通过docker运行时环境变量进行了配置。
而第三方信息,由于原作者没有写docker环境变量,所以目前只能修改config.yml文件参数,基本参数如下:config.yml文件已经通过volume vo-go-ldap-admin映射到本地,可以动过1
2
3
4
5
6
7
8
9
10
11
12
13
14dingtalk:
# 配置获取详细文档参考: http://ldapdoc.eryajf.net/pages/94f43a/
flag: "dingtalk" # 作为钉钉在平台的标识
app-key: "xxxxxxxxxxxxxxx" # 应用的key
app-secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 应用的secret
agent-id: "12121212" # 目前agent-id未使用到,可忽略
enable-sync: false # 是否开启定时同步钉钉的任务
dept-sync-time: "0 30 2 * * *" # 部门同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点
user-sync-time: "0 30 3 * * *" # 用户同步任务的时间点 * * * * * * 秒 分 时 日 月 周, 请把时间设置在凌晨 1 ~ 5 点,注意请把用户同步的任务滞后于部门同步时间,比如部门为2点,则用户为3点
dept-list: # 配置要同步的部门列表,配置留空则同步所有部门,在开头加^表示不同步此部门
#- "48456726" # 需要同步的部门ID
#- "^61213417" # 不需要同步的部门ID
is-update-syncd: false # 当钉钉用户的邮箱,手机号,部门等信息更新之后,是否同步更新,默认为false,如果你不了解这个字段的含义,则不建议开启
user-leave-range: 0 #按配置天数查离职时间范围内的用户,为0时不限制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
参考资料: