AD域控结合Self-Password-Services实现自助改密码
- 操作系统:Anolis(类似centos,使用yum,dnf包管理)
AD域控结合Self-Password-Services实现自助改密码
经常会有这样的场景,AD域用户忘记或遗失了自己的密码。这时候可以找管理员进行修改,但是情况多了也会有些麻烦。所以可以尝试搭建**ssp(self-password-sercive)**实现用户自助改密码。还可以通过脚本的方式实现批量改密码,结合邮件等功能也能自主改密码。
使用了两种方式部署,分别是实体机部署以及docker部署,本文部署方式为实体机部署,docker部署可能因为镜像,等等原因不及而终。最后整理部分报错信息以及解决方案供参考。
- 准备资料
SSP项目地址:ltb-project/self-service-password: Web interface to change and reset password in an LDAP directory
AD域控服务器(CS)搭建方式:企业AD域(域控服务器)的安装和配置详细教程_域服务器的安装与配置-CSDN博客
AD CA服务器搭建方式:AD域控与CA证书、NPS(radius)超级详细安装_ad ca-CSDN博客
1. 安装httpd(apache)php各项依赖
1 | # 安装 Apache 和 PHP |
![image-20250704102141823]..\images\Linux\运维\ssp\image-20250704102141823.png)
2. 开始安装ssp
1.配置源
- 可以尝试先下载
1 | dnf -y install self-service-password |
我这里下载过所以显示已经安装,如果不能安装则进入下一步:
- 配置源:
1 | vim /etc/yum.repos.d/ltb-project.repo |
写入以下信息:
1 | [ltb-project-noarch] |
- 导入GPG私钥
1 | rpm --import https://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project |
- 添加php72的yum源
1 | yum -y install epel-release |
3. 下载安装
1 | dnf -y install self-service-password |
4. 配置文件
其实最麻烦的其实是这里,这个配置文件很长,有很多细节。此时你下载好了之后,启动httpd服务就可以访问到ssp的界面了,但是会报错:在使用凭据加密前,需要在 keyphrase 设置中填写一个随机字符串
先实现基本功能-用户自己使用旧密码改为新密码。只要这一步能够pass,那么使用邮件就能通过。
1. 证书设置
1. 导出证书
- 要想ssp能够正常修改AD域的用户名账号密码几乎无法逃开证书认证的部分
- 个人尝试过各种方式跳过加密,都是不行的,顶多能够查询信息,修改是不可能的。
- AD域根证书导出
登录到服务器后Win+R输入cmd打开命令行输入:
1 | cd Desktop |
这样根证书就导出到桌面了,注意如果没有安装AD CS服务,这个命令是无法生效的
然后传到服务器即可
1 | scp root.cer root@192.168.72.128:/root/ |
2. 导入证书并生效
- 上一步传过来的证书是二进制的,无法被Linux添加,需要先转换格式
1 | openssl x509 -in root.cer -inform DER -out root.pem -outform PEM |
- 根据Linux发行版的不同,导入方式有差别,基于Debian/Ubuntu:
1 | # 对于基于 Debian/Ubuntu |
- 基于 RHEL/CentOS (龙蜥使也是用这种方式)
1 | # 对于基于 RHEL/CentOS |
3. 检查是否导入成功。
- 基于Debian/Ubuntu:
1 | openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt root.pem |
- RHEL/CentOS (龙蜥使也是用这种方式)
1 | openssl verify -CAfile /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem root.pem |
2. config.inc.php配置文件设置
- 首先保证最小功能,也就是ldap和ad的设置
- LDAP
1 |
|
- AD设置
1 |
|
- 还有一处重要的地方!
- 搜索 manager,一共有2处设置
需要将对应的设置比如$who_change_password = "manager";
改为manager
,否则会遇到改密码权限问题。
5. 启动
至此大部分配置均已结束,可以开始启动或尝试重启httpd和php-fpm进行测试了。
1 | systemctl restart httpd |
6. 遇到的问题汇总与解决方式
1. 安装ssp时提示有关php的版本问题
查看已有的版本,并启用对应的版本:
1 | dnf module reset php -y |
1 | dnf module list php # 查看系统的php模块 |
2. 不能访问LDAP服务
- 这个问题可能是由以下原因造成
- 网络问题(防火墙等)
对于网络问题,可以测试用telnet
1 | telnet 192.168.72.129 636 |
对于防火墙策略:
- 客户端和服务端可以关闭防火墙进行测试
3. 证书问题引起的无法修改密码
证书问题也是我卡住的主要问题,比较棘手。
- 引起证书问题的原因
- 根证书不对
- 证书加密强度不够
- 证书未正确加载
根证书不对的结局方向:
重复重新操作证书设置,
从AD域服务器重装CA服务器角色
不使用命令行,使用图形化的方式导出方式
证书加密强度不够
- 这个会导致能够访问到ldap服务器,但是无法修改成功,会显示密码被拒绝,即使你用了强密码,完全符合AD域服务器的密码策略。
解决方法:
- 重新导出根证书:使用加密方式更为安全的算法:sha512 * 4096 bit或更好
- 放宽加密证书要求的策略,也是我测试时使用的最有效的方式
1 | vim /etc/openldap/ldap.conf |
增加,或者禁用
1 | TLS_CIPHER_SUITE NORMAL |
1 | TLS_REQCERT allow # or TLS_REQCERT never |
证书未正确加载
查看证书是否一致
1 | cat root.crt # or cat root.pem |
- 查看证书是否放在正确的位置,根据发行版不同放在不同的位置
1 | # 对于基于 Debian/Ubuntu |