准备工作
- 一台 CentOS 7.9 服务器:确保可以联网以下载软件包。
- 正常的 OpenLDAP 服务器:假设您的 LDAP 服务器地址是 ldap://192.168.1.100:389,基础 DN 是dc=example,dc=com。
- 一个具有重置密码权限的 LDAP 代理账户:例如 cn=ssp,ou=sysaccounts,dc=example,dc=com。确保 ACL 允许此账户修改用户密码。
- Sudo 权限:您需要以 root 用户或具有 sudo 权限的用户执行以下大部分命令。
步骤一:安装必要的软件(Web 服务器、PHP 等)
- 安装 EPEL 仓库(提供更多软件包):
sudo yum install -y epel-release- 安装 Apache Web 服务器和 PHP 及其扩展:
 Self Service Password 需要特定版本的 PHP。CentOS 7 默认的 PHP 5.4 太旧,我们需要安装更高版本的 PHP(如 7.4)。这里使用 Remi 仓库。
# 安装 Remi 仓库
sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# 启用 PHP 7.4 Remi 仓库
sudo yum-config-manager --enable remi-php74
# 安装 Apache, PHP 及所有必需扩展
sudo yum install -y httpd php php-common php-ldap php-mbstring php-curl php-intl php-json php-xml php-zip- 启动 Apache 并设置开机自启:
sudo systemctl start httpd
sudo systemctl enable httpd- 配置防火墙允许 HTTP/HTTPS 流量:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload步骤二:下载和安装 Self Service Password
- 下载最新的 Self Service Password 压缩包:
 访问 GitHub Releases 页面 查看最新版本。以下以v1.5.1为例。
cd /tmp
wget https://github.com/ltb-project/self-service-password/releases/download/v1.5.1/self-service-password-1.5.1.tar.gz- 解压文件到 Apache 的网页根目录:
sudo tar -xzf self-service-password-1.5.1.tar.gz -C /var/www/html/- 重命名目录(可选,为了便于访问):
sudo mv /var/www/html/self-service-password-1.5.1 /var/www/html/ssp- 设置正确的文件所有权:
sudo chown -R apache:apache /var/www/html/ssp/步骤三:配置 Self Service Password
- 复制配置文件模板:
cd /var/www/html/ssp/conf/
sudo cp config.inc.php config.inc.local.php- 编辑本地配置文件:
 使用您喜欢的编辑器(如vim或nano)编辑config.inc.local.php。重点修改以下关键参数:
sudo vim /var/www/html/ssp/conf/config.inc.local.php<?php
// LDAP 服务器地址
$ldap_url = "ldap://192.168.1.100:389";
// 使用 TLS (如果配置了 LDAPS,请设置为 true)
$ldap_starttls = false;
// LDAP 基础 DN
$ldap_base = "dc=example,dc=com";
// 用于绑定和修改密码的代理用户 DN 和密码
$ldap_binddn = "cn=ssp,ou=sysaccounts,dc=example,dc=com";
$ldap_bindpw = "Your_Strong_Password_Here"; // 替换为代理用户的真实密码
// 用户对象类
$ldap_user_object_class = "inetOrgPerson";
// 用于绑定和搜索的属性(通常是 uid 或 cn)
$ldap_user_login_attr = "uid";
// 加密方式:推荐使用 SSHA(或 SHA、MD5、CRYPT、BLOWFISH等,需与LDAP策略匹配)
$hash = "ssha";
// 密码策略:最小长度
$pwd_min_length = 8;
// 密码策略:必须包含大写字母、小写字母、数字、特殊字符
$pwd_complexity = array('upper', 'lower', 'digit', 'special');
// 界面语言
$lang = "en";
// 是否使用邮件重置功能(如果不需要,请保持为 false)
$use_questions = false;
$use_tokens = false;
$use_sms = false;
// 日志文件路径
$logfile = "/var/log/ssp.log";
?>重要:请根据您的实际 LDAP 环境仔细修改上述值,尤其是 $ldap_url, $ldap_base, $ldap_binddn, 和 $ldap_bindpw。
- 创建日志文件并设置权限:
sudo touch /var/log/ssp.log
sudo chown apache:apache /var/log/ssp.log步骤四:调整 SELinux 和文件权限
- 调整 SELinux 策略(如果 SELinux 是 Enforcing 模式):
# 允许 Apache 连接到网络(LDAP)
sudo setsebool -P httpd_can_network_connect 1
# 如果日志文件访问有问题,可以设置正确的 SELinux 文件上下文
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/log/ssp.log"
sudo restorecon -v /var/log/ssp.log
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/ssp/conf(/.*)?"
sudo restorecon -Rv /var/www/html/ssp/conf/如果不想处理 SELinux,可以临时将其设置为 Permissive 模式进行测试(生产环境不推荐):
bash
- 复制下载
sudo setenforce 0- 重启 Apache 服务以加载所有配置:
sudo systemctl restart httpd步骤五:测试和访问
- 打开浏览器,访问您的服务器地址:
http://your-centos-server-ip/ssp或
http://your-centos-server-ip/ssp/index.php- 您应该看到 Self Service Password 的登录界面。
- 进行测试:
- 输入一个 LDAP 中的用户名(uid)。
- 输入该用户的当前(已过期)密码。
- 输入并确认新密码。
- 点击“Change”按钮。
- 检查结果:
- 如果成功,会显示绿色成功消息。
- 如果失败,请首先检查 /var/log/ssp.log和 Apache 的错误日志/var/log/httpd/error_log来排查问题。
故障排除
- “Cannot connect to LDAP server”:检查 $ldap_url和防火墙设置,确保 CentOS 服务器可以连接到 LDAP 服务器的 389 端口。
- “Invalid credentials” 或 “Unable to bind”:仔细检查 $ldap_binddn和$ldap_bindpw是否正确。可以在命令行用ldapsearch -x -H your_ldap_url -D “cn=ssp,...” -W测试代理账户能否成功绑定。
- “Insufficient access”:代理账户没有修改用户密码的权限。检查 LDAP 服务器的 ACL 规则。
- 页面显示乱码或空白:检查 PHP 是否正常安装,以及 /var/www/html/ssp/的文件权限是否为apache:apache。
- 密码复杂度错误:根据您的 LDAP 密码策略调整 $pwd_min_length和$pwd_complexity参数。
通过以上步骤,您应该可以在 CentOS 7.9 上成功搭建一个功能完整的 LDAP 自助密码修改平台。
 
 
                     
            
        













 
                    

 
                 
                    