51CTO_开源的密码自助平台Self Service Password

开源的密码自助平台Self Service Password

阅读原文

建议阅读原文,始终查看最新文档版本,获得最佳阅读体验:《开源的密码自助平台Self Service Password》

https://docs.dingtalk.com/i/nodes/gpG2NdyVX3Z65nZ2sydD1x1jWMwvDqPk

引言

企业环境中,一般都是将各个系统的账号统一对接到活动目录中,方便管理,用户也不用记住一堆用户名和密码,修改密码也比较方便,很多企业都会自己部署密码自助修改平台,方便用户自行重置密码。我在github上发现了一个开源项目,可以实现自助修改密码,操作简单,页面支持多语言,在生产环境中应用也是完全OK的,我写了一盘文章介绍这个开源项目,并详细说明了如何利用docker快速部署,以及验证。

LTB简介

LTB(LDAP Tool Box)旗下的 Self Service Password 是一个用于 LDAP / Active Directory 的自助密码管理 Web 应用。🚀

用户可以通过这个系统自己修改密码、重置密码、解锁账户等,而无需 IT 人员干预,大幅减轻密码相关运维负担。该项目在 GitHub 上以 MIT/GPL 类开源许可证发布,并提供 Docker 镜像方便部署。

核心特性

  • 支持标准 LDAPv3 目录服务(如 OpenLDAP、389 Directory、ApacheDS),同时也兼容 Active Directory 模式。

  • 本地密码策略支持:密码最小/最大长度、禁止字符、自定义复杂度规则、禁止重用历史密码等。

  • 提供多种重置方式:邮件令牌、中途安全问题、SMS(通过外部服务接口)等。

  • 带有验证码机制(防止自动脚本滥用)、邮件通知、钩子脚本(允许在密码变更前后插入自定义逻辑)。

  • 提供官方 Docker 镜像,部署方式灵活:从源码、打包、Docker 均可使用。

优点与适用场景(可在你的文章中强调)

  • 部署轻量、运维成本低 --- 只需 PHP + LDAP 扩展环境,借助 Docker 可以快速上线。

  • 可扩展性强 --- 钩子机制、外部服务接口(如邮件、SMS)、多语言支持都具备。

  • 安全性可控 --- 支持 SSL / LDAPS、证书验证、密码策略、禁用账户检查等。

  • 用户友好 --- 对终端用户界面直观,减少忘记密码带来的支持工单量。

相似的开源项目

pwm-project/pwm: pwm

github网址

https://github.com/ltb-project/self-service-password

官方文档

LDAP Tool Box Self Service Password documentation --- LDAP Tool Box Self Service Password documentation

用docker快速部署

官方文档:Installation --- LDAP Tool Box Self Service Password documentation

管理AD证书

文档:LDAP connection --- LDAP Tool Box Self Service Password documentation

https://ltb-project.org/documentation/active_directory_certificates.html

如果要通过LTB来更改域账号的密码,则必须要通过LDAPS连接到AD,也就是要用到证书。其实这个证书就是CA的根证书,所以可以通过任意一台加入域的计算机导出根证书。

首先得有证书颁发机构,如果还没有安装,可以参考我写的这篇文章:《自建bitwarden密码管理服务器》

然后随便找一台加入域的计算机,运行窗口中输入mmc,然后回车进入Microsoft控制台

添加/删除管理单元

我的环境中,证书颁发机构是直接部署在域控制器上的,下图红色箭头所示的就是证书颁发机构的根CA,我们就是要导出这个root ca

如此,便成功导出了root ca。

将到处的root ca文件放到服务器的/home/ubuntu目录中,并复制到/etc/ssl/certs/目录下。下文的docker要用到(通过卷映射)

创建配置文件

先创建一个目录,配置文件放到这个目录里

shell 复制代码
mkdir ltb
cd ltb

下面是我使用的配置文件

参考文档:LDAP connection --- LDAP Tool Box Self Service Password documentation

php 复制代码
<?php
// ======================================================
// Self Service Password (SSP) 配置文件
// 环境:Microsoft Active Directory + LDAPS
// 作者:tornadoami
// 网站:https://docs.dingtalk.com/i/nodes/gpG2NdyVX3Z65nZ2sydD1x1jWMwvDqPk
// ======================================================

// 🔐 SSP 内部加密密钥(用于临时令牌、验证码等加密)
//   可自定义为复杂字符串,生产环境务必修改
$keyphrase = "mysecret";

// 🧩 调试模式
//   true:启用详细日志(调试阶段用)
//   false:生产环境建议关闭
$debug = true;

// 🏢 启用 Active Directory 模式
$ad_mode = true;

// 👤 LDAP 用户过滤器
//   - sAMAccountName:登录用户名属性
//   - userAccountControl:...:排除被禁用账户
$ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";

// ⚙️ AD 特定选项
$ad_options['force_unlock'] = true;                // 密码修改时自动解锁账户
$ad_options['change_expired_password'] = true;     // 支持修改过期密码

// 🌐 LDAP 服务器地址(LDAPS 模式)
// 注意:LDAP的url,不应使用ip地址,而是应该用服务器的计算机全名,这是因为证书中的san通常都是计算机名而不是ip地址,如果用ip地址,则会导致绑定失败。
$ldap_url = "ldaps://dc-t.dltornado2.com";

// 🧷 禁用 StartTLS(LDAPS 已使用 SSL)
$ldap_starttls = false;

// 🧾 设定 LDAP SSL 安全参数(通过 putenv 注入)
//   demand = 必须验证服务器证书(生产推荐)
//   allow  = 允许但不强制验证(测试时可用)
putenv("LDAPTLS_REQCERT=demand");

// 📜 指定 AD 根证书路径(容器挂载时定义)
//   注意:必须与 docker run 中的挂载路径一致
putenv("LDAPTLS_CACERT=/etc/ssl/certs/dltornado2.com-root-ca.cer");

// 🔑 绑定账户(具有 LDAP 查询权限)
//   建议使用仅限查询权限的服务账户
$ldap_binddn = "CN=it.django,OU=SpecialAccount,OU=myse,DC=dltornado2,DC=com";
$ldap_bindpw = "<此处要输入域用户it.django的密码>";

// 🗂️ LDAP 搜索起始点(用户所在 OU)
$ldap_base = "OU=myse,DC=dltornado2,DC=com";

// 👥 登录使用的属性(AD 中通常是 sAMAccountName)
$ldap_login_attribute = "sAMAccountName";

// ======================================================
// ✉️ 邮件通知功能(可选)
// ======================================================
// 如果需要在用户密码修改后发送确认邮件,请启用以下配置

$mail_attribute = "mail";          // AD 邮箱属性字段
$mail_from = "noreply@dltornado2.com";
$mail_from_name = "密码自助系统";
$mail_signature = "此邮件由系统自动发送,请勿回复。";

$mail_smtp_server = "smtp.dltornado2.com";
$mail_smtp_port = 587;
$mail_smtp_auth = true;
$mail_smtp_user = "noreply@dltornado2.com";
$mail_smtp_password = "你的SMTP密码";
$mail_tls = true;

// ======================================================
// ✅ 结束
// ======================================================
?>

运行容器

官方提供了容器镜像

注意:LDAP的url,不应使用ip地址,而是应该用服务器的计算机全名,这是因为证书中的san通常都是计算机名而不是ip地址,如果用ip地址,则会导致绑定失败。

shell 复制代码
docker run -d \
  -p 8001:80 \
  -v /home/ubuntu/ltb/:/var/www/conf/ \
  -v /home/ubuntu/dltornado2.com-root-ca.cer:/etc/ssl/certs/dltornado2.com-root-ca.cer:ro \
  -e LDAP_URL="ldaps://dc-t.dltornado2.com" \
  -e LDAP_TLS_CACERTFILE="/etc/ssl/certs/dltornado2.com-root-ca.cer" \
  -e LDAP_TLS_REQCERT="demand" \
  docker.io/ltbproject/self-service-password:latest

验证

我随便选了一个用户,测试能否正常修改密码

密码修改成功

验证

外链图片转存中...(img-dcKsBvVf-1761556967594)

我随便选了一个用户,测试能否正常修改密码

外链图片转存中...(img-UWKL5OqB-1761556967594)

密码修改成功

外链图片转存中...(img-YxbG5q6w-1761556967594)

外链图片转存中...(img-l6mU15Cy-1761556967594)

相关推荐
AscendKing5 小时前
一个开源免费的验证码系统简介 天爱验证码
开源·验证码·好好学电脑
算是难了5 小时前
Docker基础总结
运维·docker·容器
ityangs6 小时前
GitLab 私服(基于 Docker)搭建方案
git·docker·容器·gitlab
Okailon6 小时前
Debian12上安裝免费开源的CMS Drupal 11 机顶盒实例
开源·php·cms
段孝先6 小时前
如何使用github上的etcd构建docker镜像
docker
三无少女指南7 小时前
在 Ubuntu 上使用 Docker 部署思源笔记:一份详尽的实践教程以及常见错误汇总
笔记·ubuntu·docker
带刺的坐椅7 小时前
Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署
java·docker·jar·springboot·solon
沐雨风栉7 小时前
告别设备限制!CodeServer+cpolar让VS Code随时随地在线编程
云原生·eureka·重构·pdf·开源