Self-Service Password 1.8.2 介绍与选型指南

LDAP Tool Box Self-Service Password 1.8.2 介绍与选型指南:定位为 LDAP 目录的用户密码自助改密/重置门户(非密码保管库),覆盖核心架构、功能特性、快速开始与 Psono/AliasVault/2FAuth/PassIt 量化选型对比。

Self-Service Password密码管理LDAP身份认证PHP 应用2026/10/24

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 feedv1.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)与仓库 LICENSELDAP 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 统一认证,用户忘记密码自行找回
身份管理套件内嵌 SSPRIAM/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 编译缓存 + 验证码/令牌缓存)。核心工作流程如下:

  1. 用户访问 Web 界面:Web 服务器(Apache/Nginx + PHP-FPM)承载页面, Smarty 渲染多语言模板;
  2. 定位用户:SSP 用配置中的服务绑定账号($ldap_binddn/$ldap_bindpw)连接 LDAP,按 $ldap_login_attribute(如 uid 或 sAMAccountName)+ $ldap_base 搜索过滤出用户 DN(来源:官方文档 LDAP connection 章节);
  3. 身份校验:改密场景用「用户旧密码」重新绑定验证;重置场景走「邮件令牌 / 短信令牌 / 安全问题」三种辅助通道之一(来源:官方文档 Password policy、Reset by questions、Reset by mail tokens 章节);
  4. 写入新密码:校验通过后按密码策略($pwd_* 参数族)检查新密码,再以 LDAP 的 password modify 扩展操作或直接替换 userPassword 属性写回目录;AD 模式下走 AD 特有的编码与解锁逻辑(v1.8.0 起 AD 相关代码下沉到 ltb-common 公共库,来源:v1.8.0 Release Notes);
  5. 通知与审计:可发送邮件/短信通知,写审计日志(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-curlhaveibeenpwned 泄露密码库 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.32025-03-27表单失败后令牌缺失修复等维护性补丁
v1.8.02026-05-29自定义模板/皮肤/favicon、审计日志时区、debug 级别可配置、改密时服务账号改为可选、AD 代码下沉 ltb-common 0.5.0、官方 Docker 镜像补 sendmail 依赖并升级 PHP/Alpine 基础环境;⚠️ AD 用户升级需按官方 upgrade 指南调整配置
v1.8.12026-06-14修复 AD 旧密码错误时报错、password modify 扩展操作错误(ltb-common#92)、多目录改密脚本调用
v1.8.22026-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 / ssha512Salted SHA,LDAP 传统默认OpenLDAP 常规部署
md5 / smd5MD5 系仅老系统兼容
crypt系统 crypt 格式老式 Unix 账号目录
ad_modeAD 要求的特殊编码(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.2Psono 7.5.3AliasVault 0.31.12FAuth 8.0.3PassIt 1.25.0
定位LDAP 密码自助改/重置门户团队密码管理器(保管库)自托管密码管理器(保管库,免邮箱注册)双因素验证码(TOTP/WebAuthn)自托管Django 系密码分享/保管库
赛道SSPR(目录侧)保管库保管库MFA保管库
技术栈PHP + SmartyPython (Django) + Vue.NET + Blazor WASMPHP (Laravel)Django
后端依赖仅 LDAP 目录,无数据库PostgreSQLSQLite/PostgreSQLMySQL/PostgreSQL/SQLitePostgreSQL/MySQL
开源许可GPL 3.0Apache 2.0(部分功能企业版)GPL 3.0(部分 FSL 风险提示)AGPL 3.0MIT
社区热度(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 套件。

八、参考链接