Self-Service Password 1.8.2 介绍与选型指南
LDAP Tool Box Self-Service Password 1.8.2 介绍与选型指南:定位为 LDAP 目录的用户密码自助改密/重置门户(非密码保管库),覆盖核心架构、功能特性、快速开始与 Psono/AliasVault/2FAuth/PassIt 量化选型对比。
Self-Service Password 1.8.2 介绍与选型指南
目标:面向正在为企业 LDAP 目录(OpenLDAP、Active Directory 等)挑选「用户密码自助服务」方案的读者,讲清 Self-Service Password(下文简称 SSP)的定位、架构、功能边界与同类产品差异,并给出可落地的选型结论。本文所有版本、发布时间、安装方式均来自官方渠道联网溯源(来源与查询日期见「一、环境信息」),未含任何本地推断数据。
一、环境信息
本文为认知与选型篇,全部信息来自以下官方渠道的联网溯源,查询日期统一为 2026-10-24,未做本地部署实测(部署实测见本专栏后续《Self-Service Password 1.8.2 Docker Compose 部署指南》等篇章):
| 信息项 | 来源 | 说明 |
|---|---|---|
| 最新稳定版本号与发布时间 | GitHub Releases(https://github.com/ltb-project/self-service-password/releases 及其 atom feed) | 实查 v1.8.2,发布于 2026-09-30 |
| 版本发布节奏(1.7.x → 1.8.x 时间线) | 同上 atom feed | v1.7.3(2025-03-27)、v1.8.0(2026-05-29,OW2 项目站公告)、v1.8.1(2026-06-14)、v1.8.2(2026-09-30) |
| 官方文档 | https://self-service-password.readthedocs.io/en/stable/ | 安装、配置、升级全部章节 |
| 社区活跃度(星数) | shields.io 徽章数据(img.shields.io/github/stars/ltb-project/self-service-password.json) | 1.3k stars |
| 项目归属与许可 | LTB 项目官网(https://ltb-project.org)与仓库 LICENSE | LDAP Tool Box 项目,GPL 3.0 |
| 发行渠道 | 官方文档 Installation 章节 + LTB 下载页(https://ltb-project.org/download.html) | Debian/RPM 仓库、官方 Docker 镜像、tar.gz 归档 |
| v1.8.0 发布公告 | OW2 项目站(https://projects.ow2.org/view/ldaptoolbox/ltb-self-service-password-1-8-0-released/) | 2026-05-29 由项目主理人 Clément OUDOT 发布 |
要点解读:上表 7 条来源互相印证了同一件事——SSP 在 2026 年仍处于活跃维护状态(当年连发 3 个稳定版),版本信息以 GitHub Releases 为最权威口径。下文所有引用处均标注来源,读者复核时以官方页面为准。
二、软件概述
本节先给出 SSP 的准确定位,并澄清一个最常见的选型混淆点:它不是密码保管库。
Self-Service Password 是 LDAP Tool Box 项目出品的 PHP Web 应用,让最终用户通过浏览器自助完成自己在 LDAP 目录中密码的修改与找回重置,官方描述原文为:"a PHP application that allows users to change their password in an LDAP directory",支持 OpenLDAP、OpenDS、ApacheDS、389 DS、RHDS 等标准 LDAPv3 目录,且明确支持 Active Directory(来源:官方文档 Presentation 章节与 GitHub Releases 说明,查询日期 2026-10-24)。
⚠️ 防混淆要点:SSP 是「密码自助服务门户」,不是「密码保管库」。 它不存储任何人的密码,只在用户与 LDAP 目录之间充当修改/重置流程的 Web 界面;用户在系统里只能改自己目录条目的 userPassword 属性。而 Teampass、Passbolt、Psono、AliasVault 这类「密码管理器/保管库」的核心是加密存储大量账号口令并支持团队共享。一句话区分:改的是「登录目录的那个密码」(SSP),存的是「一堆网站的密码」(保管库)。两者在企业里经常是互补部署而非二选一——目录密码用 SSP 自助维护,网站/应用凭据用保管库统一托管。
💡 技术拓展:「密码自助服务(Self-Service Password Reset, SSPR)」在业界有三种常见实现形态——
形态 原理 代表产品 适用场景 目录侧 SSPR 门户 直接对接 LDAP/AD,改目录内密码属性 Self-Service Password、OpenIAM 企业已有 LDAP/AD 统一认证,用户忘记密码自行找回 身份管理套件内嵌 SSPR IAM/IdP 套件自带找回流程 Keycloak(Reset Credentials)、GLUU 已部署完整 IAM 体系,找回流程与单点登录一体 密码保管库的自助恢复 保管库自身的主密码找回/应急访问 Psono、Bitwarden 面向「密码管理器」自身凭据的找回 SSP 属于第一类「目录侧 SSPR 门户」,本方案选择它的理由:不引入整套 IAM 的重量级依赖,只解决「目录密码自助改/自助找回」一件事,与 OpenLDAP、Active Directory 均可直连。
项目基本信息一览(来源:LTB 官网、GitHub 仓库,查询日期 2026-10-24):
| 属性 | 值 |
|---|---|
| 项目全称 | LDAP Tool Box Self Service Password |
| 所属项目族 | LDAP Tool Box(LTB,还有 self-service-password、ltb-project-openldap 等兄弟项目) |
| 主要维护方 | Worteks 团队(Clément OUDOT / coudot、David Coutadeur / davidcoutadeur),OW2 开源基金会孵化项目 |
| 开源许可 | GPL 3.0 |
| 技术栈 | PHP(≥7.4,1.8.x 已适配 PHP 8.x 与 Alpine 基础环境)+ Smarty 模板 + php-ldap 扩展 |
| 最新稳定版 | v1.8.2(2026-09-30,含安全补丁) |
| 社区规模 | GitHub stars 1.3k(shields.io,2026-10-24 实查) |
| 交付形态 | Debian/Ubuntu 官方 apt 仓库、CentOS/RHEL 官方 yum 仓库、官方 Docker 镜像(ltbproject/self-service-password)、tar.gz 源码归档 |
三、核心架构
本节按「请求流」拆解 SSP 的内部结构与外部依赖,帮助读者理解它对目录、邮件、Web 服务器各有什么要求。
SSP 的整体架构是一个典型的「无独立数据库的 PHP 单体应用」:所有业务数据(用户、答案、令牌)都保存在 LDAP 目录本身,应用自身只需要一个可写的缓存目录(Smarty 编译缓存 + 验证码/令牌缓存)。核心工作流程如下:
- 用户访问 Web 界面:Web 服务器(Apache/Nginx + PHP-FPM)承载页面, Smarty 渲染多语言模板;
- 定位用户:SSP 用配置中的服务绑定账号(
$ldap_binddn/$ldap_bindpw)连接 LDAP,按$ldap_login_attribute(如uid或sAMAccountName)+$ldap_base搜索过滤出用户 DN(来源:官方文档 LDAP connection 章节); - 身份校验:改密场景用「用户旧密码」重新绑定验证;重置场景走「邮件令牌 / 短信令牌 / 安全问题」三种辅助通道之一(来源:官方文档 Password policy、Reset by questions、Reset by mail tokens 章节);
- 写入新密码:校验通过后按密码策略(
$pwd_*参数族)检查新密码,再以 LDAP 的 password modify 扩展操作或直接替换userPassword属性写回目录;AD 模式下走 AD 特有的编码与解锁逻辑(v1.8.0 起 AD 相关代码下沉到 ltb-common 公共库,来源:v1.8.0 Release Notes); - 通知与审计:可发送邮件/短信通知,写审计日志(v1.8.0 起支持日志时区配置),失败尝试有速率限制(v1.8.2 补齐安全问题与短信令牌的限流,来源:v1.8.2 Release Notes)。
架构要点解读:「状态存目录」是 SSP 最核心的设计——它不新增任何用户数据库,安全问题答案、密码变更痕迹都是目录里的普通属性/对象(如 answerValue 等),因此部署 SSP 不会引入新的数据孤岛,备份与高可用策略直接继承目录本身的。代价是目录 schema 必须允许这些属性(安全问题需要注册 answerValue 等 schema 对象),且服务绑定账号需要足够的写权限(加固细节见本专栏《Self-Service Password 1.8.2 安全加固指南》)。
外部依赖清单(来源:官方文档 Installation 章节前置条件,查询日期 2026-10-24):
| 依赖 | 用途 | 必需性 |
|---|---|---|
| Web 服务器(Apache / Nginx + PHP-FPM) | 承载 Web 界面 | 必需 |
| PHP ≥ 7.4(1.8.x 支持 PHP 8.x) | 运行时 | 必需 |
| php-ldap | 与目录通信 | 必需 |
| php-mbstring | 重置邮件的多字节处理 | 必需 |
| php-openssl | 令牌加密 | 必需(通常内置) |
| php-filter | 输入过滤 | 必需 |
| php-curl | haveibeenpwned 泄露密码库 API 检查 | 可选(启用该功能时必需) |
| php-gd | 验证码图片 | 可选(启用 captcha 时必需) |
| Smarty 3 / 4 | 模板引擎 | 必需(Debian 包自带依赖) |
| SMTP 邮件通道 / SMS API | 邮件令牌与短信令牌发送 | 可选(启用对应重置方式时必需) |
四、功能特性
本节按用户操作路径归纳 SSP 的功能全集,全部条目可从官方文档目录与 Release Notes 交叉验证(查询日期 2026-10-24)。
1. 三种密码找回/重置通道(管理员可按需开关):
- 邮箱令牌重置:用户输入登录名或邮箱,SSP 发送含一次性令牌链接的邮件,令牌有时效(
$token_lifetime),点击后进入设新密码页; - 短信令牌重置:从目录的用户手机号属性取号码,经 SMS API 网关发送验证码(v1.8.2 补充了短信令牌的尝试次数限制);
- 安全问题重置:用户预先登记的问题/答案保存在目录中,忘记密码时答对即可重置(v1.8.2 补充了问题答案失败尝试的限流)。
2. 已登录改密:输入旧密码 + 新密码完成自助修改,支持 Show/Hide 密码明文切换(v1.8.0 优化)。
3. 密码策略引擎($pwd_* 参数族,官方文档 Password policy 章节):最小/最大长度、大写/小写/数字/特殊字符最少个数、禁止字符、禁止包含登录名、新旧密码最小差异、复杂度总分、与目录 ppolicy 模块联动校验、haveibeenpwned 泄露库检查等。
4. 目录兼容模式:Active Directory 模式($ad_mode,含 AD 密码编码与旧密码错误处理,v1.8.1 专门修复了 AD 旧密码输错时报错的问题)、Samba 模式(同步 sambaNTPassword)、Shadow 模式(同步过期时间属性)、edir_MODE(Novell eDirectory)、自定义密码哈希($password_hash)。
5. 管理与扩展能力:
- 多目录/多租户:
$ldap_url支持多地址、multi-ldap 场景(v1.8.1 修复多目录改密脚本调用); - 钩子脚本:密码修改前后可挂自定义脚本(如同步到其他系统);
- 服务账号可选化:v1.8.0 起普通改密可不依赖服务绑定账号(用户凭自身凭据绑定);
- 验证码:支持 reCAPTCHA 与 FriendlyCaptcha(v1.8.0 完成本地化);
- 速率限制与审计日志:失败尝试限流、审计日志带可配置时区(v1.8.0/1.8.2);
- 皮肤与模板:自定义皮肤(如 DSFR 法国政府设计系统皮肤,见 self-service-password-theme-dsfr 仓库)、自定义模板、favicon 与 logo 可配置;
- 多语言:30 余种语言包(含中文 zh_CN),由社区持续翻译维护。
6. 2026 年版本节奏与关键变化(来源:GitHub Releases atom feed,查询日期 2026-10-24):
| 版本 | 发布时间 | 关键变化 |
|---|---|---|
| v1.7.3 | 2025-03-27 | 表单失败后令牌缺失修复等维护性补丁 |
| v1.8.0 | 2026-05-29 | 自定义模板/皮肤/favicon、审计日志时区、debug 级别可配置、改密时服务账号改为可选、AD 代码下沉 ltb-common 0.5.0、官方 Docker 镜像补 sendmail 依赖并升级 PHP/Alpine 基础环境;⚠️ AD 用户升级需按官方 upgrade 指南调整配置 |
| v1.8.1 | 2026-06-14 | 修复 AD 旧密码错误时报错、password modify 扩展操作错误(ltb-common#92)、多目录改密脚本调用 |
| v1.8.2 | 2026-09-30 | 安全补丁版本:补齐安全问题失败尝试限流(#1172)、短信令牌尝试限流(#1173)、LDAP 值类型浮点导致 PHP 致命错误(#1123)、guzzle/psr7 依赖升级、DEB 包 /var/cache/self-service-password 属主修正 |
节奏解读:SSP 保持「小步快跑 + 出安全漏洞即发补丁版」的节奏,1.8.x 三个版本间隔均在 1~3 个月内,作为选型方这意味着生产问题有较快的修复通道,升级窗口也短(1.8.x 内为补丁级升级)。
五、快速开始(最小可用示例)
本节给出从零把 SSP 跑起来的最短路径(Ubuntu/Debian 系),命令与配置均摘自官方文档 Installation / Configuration 章节并标注来源(查询日期 2026-10-24),供读者评估工作量;逐命令实测与排障见部署篇。
1. 配置官方 apt 仓库并安装(来源:官方文档 Installation → Debian/Ubuntu,2025 年 8 月起使用新 GPG 密钥):
# 导入 LTB 仓库签名密钥(deb822 格式,Signed-By 指向该 keyring)
wget -O - https://ltb-project.org/documentation/_static/ltb-project-debian-keyring.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/ltb-project-debian-keyring.gpg >/dev/null
# 写入 deb822 格式仓库源
sudo vi /etc/apt/sources.list.d/ltb-project.sources
ltb-project.sources 内容:
Types: deb
URIs: https://ltb-project.org/debian/stable
Suites: stable
Components: main
Signed-By: /usr/share/keyrings/ltb-project-debian-keyring.gpg
Architectures: amd64
sudo apt update
sudo apt install self-service-password # 自动带上 apache2/php/smarty3 依赖
2. 最小配置:SSP 的配置文件为 /usr/share/self-service-password/conf/config.inc.php(主配置),个性化覆盖写入同目录 config.inc.local.php(升级不被覆盖)。官方 Docker 部署示例给出的最小可用配置如下(来源:官方文档 Installation → Docker,其中 LDAP 地址/账号按自己环境替换):
<?php
// My SSP configuration
$keyphrase = "mysecret"; // 令牌加密盐,务必改成随机长串
$debug = true; // 排障期打开,生产关闭
$ldap_url = "ldap://localhost"; // 目录服务器地址
$ldap_binddn = "cn=manager,dc=example,dc=com"; // 服务绑定账号 DN
$ldap_bindpw = 'secret'; // 服务绑定账号密码
$ldap_base = "dc=example,dc=com"; // 搜索基础 DN
$ldap_login_attribute = "uid"; // 登录名属性
?>
3. 验证:浏览器打开 http://<服务器地址>/,出现 SSP 首页(Change password / Forgotten password 双入口)即安装成功;官方文档 Webserver configuration 章节提供 Apache 与 Nginx 两种承载配置。
💡 技术拓展:上面配置中
$password_hash决定新密码在目录里的存储哈希,常见选项对比——
方案 原理 适用场景 clear 明文存入,由目录服务端哈希 目录端配置了 ppolicy 哈希策略时 ssha / ssha512 Salted SHA,LDAP 传统默认 OpenLDAP 常规部署 md5 / smd5 MD5 系 仅老系统兼容 crypt 系统 crypt 格式 老式 Unix 账号目录 ad_mode AD 要求的特殊编码(UTF-16LE + 引号) Active Directory 自动处理 SSP 默认
ssha;对接 OpenLDAP 用默认即可,对接 AD 开$ad_mode后无需关心哈希。本文示例为最小配置未显式设置,采用默认 ssha。
4. 令牌/重置通道的最小启用:邮件令牌需配置 $mail_from、$mail_smtp_host 等 mail 参数;安全问题需先在目录注册相关 schema 并开启 $questions_enabled;短信需 SMS API 网关。三项均为可选功能,最小闭环「改密 + 邮箱令牌重置」只多配 mail 段即可(参数逐项说明见本专栏《Self-Service Password 1.8.2 配置参数详解》)。
六、适用场景与限制
本节从「什么组织适合用 / 什么情况不适合用」两侧给出边界,均基于官方文档与源码行为归纳。
适合的场景:
- 已有 OpenLDAP / Active Directory 统一认证的组织:员工忘记目录密码时自助找回,减少 IT 工单(SSP 的三个找回通道恰好覆盖「有邮箱」「有手机」「登记过安全问题」三类用户);
- OpenVPN、GitLab、Jenkins、Zabbix、Nexus 等大量第三方系统 LDAP 认证的企业:目录密码改了,所有下游系统同步生效,SSP 成为密码生命周期的统一入口;
- 需要策略强制的合规环境:密码策略引擎 + 泄露库检查 + 速率限制 + 审计日志满足等保/ISO 27001 对口令管理的常见条款;
- 不想要 IAM 大件的中小团队:一台 Web 服务器 + 一个目录就能跑,无数据库依赖。
限制与不适用:
- 不能当密码保管库:不存储、不托管任何第三方网站凭据,没有浏览器插件、没有密码分享;这类需求应选 《Psono 介绍与选型指南》 或 《AliasVault 介绍与选型指南》 一类保管库产品;
- 只面向「知道自己登录名」的用户:找回通道依赖邮箱/手机号/安全问题预先登记,目录里没有这些属性的用户走不通重置流程;
- 安全问题通道的安全性取决于登记质量:答案弱(如生日)时等同于弱口令,官方在 v1.8.2 也只是补了限流,生产启用需配套登记规范(见本专栏《Self-Service Password 1.8.2 安全加固指南》);
- 短信通道依赖第三方 SMS API:国内使用需要自接网关,官方只内置若干国际 SMS 服务商接口;
- 界面为传统服务端渲染:无 SPA 风格,移动端可用但不算精致;有高定品牌需求时走自定义皮肤(DSFR 皮肤仓库可参考)或模板覆盖。
七、同类选型对比
本节先给「同赛道 SSPR 门户」的横向量化对比,再给「定位相似但赛道不同」的密码类产品的定位区分,帮助读者在两条线上都不选错。
1. 与本批次同类自托管产品的量化对比(数据查询日期均为 2026-10-24,来源为各自 GitHub Releases/官方文档;SSP 星数来自 shields.io):
| 维度 | Self-Service Password 1.8.2 | Psono 7.5.3 | AliasVault 0.31.1 | 2FAuth 8.0.3 | PassIt 1.25.0 |
|---|---|---|---|---|---|
| 定位 | LDAP 密码自助改/重置门户 | 团队密码管理器(保管库) | 自托管密码管理器(保管库,免邮箱注册) | 双因素验证码(TOTP/WebAuthn)自托管 | Django 系密码分享/保管库 |
| 赛道 | SSPR(目录侧) | 保管库 | 保管库 | MFA | 保管库 |
| 技术栈 | PHP + Smarty | Python (Django) + Vue | .NET + Blazor WASM | PHP (Laravel) | Django |
| 后端依赖 | 仅 LDAP 目录,无数据库 | PostgreSQL | SQLite/PostgreSQL | MySQL/PostgreSQL/SQLite | PostgreSQL/MySQL |
| 开源许可 | GPL 3.0 | Apache 2.0(部分功能企业版) | GPL 3.0(部分 FSL 风险提示) | AGPL 3.0 | MIT |
| 社区热度(stars 量级) | 1.3k | 千级 | 千级(增长快) | 千级 | 数百级 |
| 2026 版本节奏 | 3 个稳定版(5/6/9 月) | 活跃 | 高频迭代(0.x→0.31) | 稳定 8.x | 缓慢 |
| 对接 LDAP | 原生(唯一主业) | 可选 LDAP 登录 | 否 | 否 | 否 |
| 移动端/浏览器插件 | 无 | 有 | 有 | 无(验证器场景无需) | 无 |
对比解读:表里只有 SSP 是「目录密码自助服务」,其余四款都在「保管库/MFA」赛道;若你的需求是「员工忘记域账号密码自己找回」,SSP 几乎没有同赛道的自托管对手(商用赛道对应 AD 的 Windows Hello/AD Self Service 类产品),若你的需求是「团队口令托管与分享」,则 SSP 不适用,应进入保管库对比(见上述四款各自的介绍篇)。
2. 逐款定位差异(详评见各自专栏):
- vs Psono:Psono 是「密码保管库 + 团队共享」,主打口令托管、分享、浏览器插件,LDAP 只是它的登录方式之一;SSP 不保管任何密码。企业两者可共存:SSP 管目录密码,Psono 管应用凭据。
- vs AliasVault:AliasVault 主打「隐私优先的保管库 + 别名邮箱」,定位端到端加密托管,与 SSP 无功能交集。
- vs 2FAuth:2FAuth 是自托管验证器(TOTP 码生成/管理),解决「第二因子」,SSP 解决「第一因子的找回」,常被一起部署:SSP 重置目录密码 + 2FAuth 自助管理 OTP。
- vs PassIt:PassIt 是 Django 系密码分享站点,同样属于保管库赛道,不与 SSP 竞争。
3. 与传统密码库(Teampass / Passbolt / Vaultwarden)的防混淆结论:Teampass(团队密码库)、Passbolt(GPG 加密保管库)、Vaultwarden(Bitwarden 兼容服务端)与 SSP 完全不同赛道;判断标准就一条——产品要不要存密码。SSP 不存(改完即写入目录),全部保管库类产品都要存(加密后落库)。选型时先把这条线划清,再在各自赛道内做对比,可避免 90% 的误选。
4. 选型结论建议:
- 「OpenLDAP/AD + 大量系统 LDAP 认证 + 想减少改密工单」→ SSP 是自托管首选,配套本专栏《Self-Service Password 1.8.2 Docker Compose 部署指南》半小时内可上线;
- 「没有统一目录、只有一堆网站密码」→ 选保管库(Psono/AliasVault/PassIt/Vaultwarden),SSP 无用武之地;
- 「要第二因子」→ SSP + 2FAuth 组合,或评估 Keycloak 全家桶;
- 「重度合规、需要 IAM 全生命周期」→ SSP 仍可作目录侧找回前端,但整体应评估 IAM 套件。
八、参考链接
- 官方网站(LDAP Tool Box 项目):https://ltb-project.org/documentation/self-service-password.html
- 官方文档站:https://self-service-password.readthedocs.io/en/stable/
- GitHub 仓库与 Releases:https://github.com/ltb-project/self-service-password
- v1.8.0 发布公告(OW2 项目站):https://projects.ow2.org/view/ldaptoolbox/ltb-self-service-password-1-8-0-released/
- 官方 Docker 镜像:https://hub.docker.com/r/ltbproject/self-service-password
- 下载页(Debian/RPM/tar.gz 渠道):https://ltb-project.org/download.html
- 自定义皮肤示例(DSFR):https://github.com/ltb-project/self-service-password-theme-dsfr
- 本站相关文档:《Psono 介绍与选型指南》、《AliasVault 介绍与选型指南》、《2FAuth 介绍与选型指南》、《PassIt 介绍与选型指南》