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

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

开源的密码自助平台 Self Service Password封面图.png

阅读原文

建议阅读原文,始终查看最新文档版本,获得最佳阅读体验:《开源的密码自助平台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控制台

image.png

添加/删除管理单元

image.pngimage.png

image.png

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

image.png

image.png

image.png

image.pngimage.png

image.pngimage.png

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

image.png

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

创建配置文件

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

mkdir ltb
cd ltb

下面是我使用的配置文件

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

<?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地址,则会导致绑定失败。

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

image.png

验证

image.png

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

image.png

密码修改成功

image.png

image.png

验证

[外链图片转存中…(img-dcKsBvVf-1761556967594)]

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

[外链图片转存中…(img-UWKL5OqB-1761556967594)]

密码修改成功

[外链图片转存中…(img-YxbG5q6w-1761556967594)]

[外链图片转存中…(img-l6mU15Cy-1761556967594)]

梦幻智能logo-01(无水印).png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值