在企业 IT 运维工作中,“帮员工改 AD 密码”几乎是永恒的工单之王:

  • 密码过期

  • 密码忘记

  • 出差 / 远程无法联系 IT

  • 半夜 VPN 登不上来

如果每一次都靠人工处理,不仅效率低,还存在明显的安全隐患。
本文将结合真实企业环境,介绍如何使用 Self Service Password 构建一个 员工自助修改 AD 密码的平台,并重点讲解 Docker 生产级部署方案


一、什么是 Self Service Password?

Self Service Password(SSP) 是 LDAP Tool Box 项目提供的一款开源 Web 应用,专门用于 LDAP / Active Directory 用户自助修改或重置密码

它支持:

  • 标准密码修改(旧密码 → 新密码)

  • 邮件令牌找回密码

  • 安全问题验证

  • 密码复杂度策略

  • Active Directory 原生支持

  • 多语言界面(支持中文)

官方文档地址:
👉 https://self-service-password.readthedocs.io/en/latest/index.html


二、为什么企业一定要做“密码自助服务”?

传统人工重置的痛点

  • ❌ 工单量极大,浪费运维时间

  • ❌ 人工重置存在社工风险

  • ❌ 员工体验极差(等、催、反复确认)

  • ❌ 夜间 / 节假日无法及时处理

自助修改后的变化

  • ✅ 员工 7×24 小时自助操作

  • ✅ 无需 IT 介入

  • ✅ 标准化流程,安全可控

  • ✅ 运维彻底解放

一句话总结:

这是一个“投入一次,长期减负”的系统。


三、工作原理(运维视角)

Self Service Password 的核心逻辑非常清晰:

员工浏览器
    ↓ HTTPS
Web 页面(SSP)
    ↓ LDAPS 636
Active Directory

流程:

  1. 员工访问 Web 页面

  2. 输入用户名 + 验证方式(旧密码 / 邮件)

  3. SSP 使用 LDAP 协议连接 AD

  4. 通过 LDAPS 修改密码

  5. 返回结果

⚠️ 注意
Active Directory 必须使用 LDAPS(636),否则无法修改密码。


四、部署方案选择建议

方案

适用场景

推荐度

直接安装 PHP + Apache

学习 / 测试

⭐⭐

Docker 单容器

小型环境

⭐⭐⭐⭐

Docker + Nginx + HTTPS

生产环境

⭐⭐⭐⭐⭐

👉 本文重点使用 Docker 部署(生产推荐)


五、Docker 部署 Self Service Password(生产推荐)

1️⃣ 准备 Docker 环境

适用于 Rocky Linux / CentOS / Ubuntu:

curl -fsSL https://get.docker.com | bash
systemctl enable docker --now
docker version

2️⃣ 创建宿主机目录

mkdir -p /opt/self-service-password/{conf,logs}
cd /opt/self-service-password

3️⃣ 编写核心配置文件

vim conf/config.inc.php

AD / LDAP 核心配置

<?php
$ldap_url = "ldaps://ad.example.com:636";
$ldap_starttls = false;

$ldap_binddn = "CN=ssp-user,OU=ServiceAccounts,DC=example,DC=com";
$ldap_bindpw = "BindUserPassword";

$ldap_base = "DC=example,DC=com";
$ldap_login_attribute = "sAMAccountName";

$ad_mode = true;
$ad_options['force_unlock'] = true;
$ad_options['change_expired_password'] = true;

密码策略示例

$pwd_min_length = 12;
$pwd_complexity = 3;
$pwd_no_reuse = true;

邮件找回(可选)

$mail_enable = true;
$mail_from = 'noreply@example.com';
$mail_host = 'smtp.example.com';
$mail_port = 587;
$mail_username = 'smtp-user';
$mail_password = 'smtp-password';
$mail_secure = 'tls';

4️⃣ 使用 Docker Compose 启动

version: "3.8"

services:
  ssp:
    image: tiredofit/self-service-password
    container_name: self-service-password
    ports:
      - "8080:80"
    volumes:
      - ./conf:/var/www/conf
      - ./logs:/var/log
    restart: unless-stopped
docker compose up -d

访问:

http://服务器IP:8080

六、Nginx + HTTPS(强烈建议)

示例 Nginx 配置

server {
    listen 443 ssl;
    server_name password.example.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

七、AD / LDAPS 常见坑(真实踩坑)

❌ 1. LDAPS 连不上

openssl s_client -connect ad.example.com:636

常见原因:

  • 域控未部署证书

  • 防火墙未放行 636

  • DNS 解析异常


❌ 2. 修改密码提示权限不足

原因:

  • 绑定账号无重置权限

解决:

  • 给绑定账号委派 “重置用户密码” 权限


八、员工最终使用体验

1️⃣ 打开

https://password.example.com

2️⃣ 输入用户名
3️⃣ 验证身份
4️⃣ 修改密码
5️⃣ AD 即时生效

无需 IT 介入,工单量直接归零。


九、总结(运维角度)

Self Service Password + Docker
是目前企业内部 AD 密码自助服务的成熟解决方案之一

它解决的不是“技术问题”,而是:

  • 运维效率

  • 安全合规

  • 员工体验