准备工作

  1. 一台 CentOS 7.9 服务器:确保可以联网以下载软件包。
  2. 正常的 OpenLDAP 服务器:假设您的 LDAP 服务器地址是 ldap://192.168.1.100:389,基础 DN 是 dc=example,dc=com
  3. 一个具有重置密码权限的 LDAP 代理账户:例如 cn=ssp,ou=sysaccounts,dc=example,dc=com。确保 ACL 允许此账户修改用户密码。
  4. Sudo 权限:您需要以 root 用户或具有 sudo 权限的用户执行以下大部分命令。

步骤一:安装必要的软件(Web 服务器、PHP 等)

  1. 安装 EPEL 仓库(提供更多软件包):
sudo yum install -y epel-release
  1. 安装 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
  1. 启动 Apache 并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd
  1. 配置防火墙允许 HTTP/HTTPS 流量
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

步骤二:下载和安装 Self Service Password

  1. 下载最新的 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
  1. 解压文件到 Apache 的网页根目录
sudo tar -xzf self-service-password-1.5.1.tar.gz -C /var/www/html/
  1. 重命名目录(可选,为了便于访问)
sudo mv /var/www/html/self-service-password-1.5.1 /var/www/html/ssp
  1. 设置正确的文件所有权

sudo chown -R apache:apache /var/www/html/ssp/

步骤三:配置 Self Service Password

  1. 复制配置文件模板
cd /var/www/html/ssp/conf/
sudo cp config.inc.php config.inc.local.php
  1. 编辑本地配置文件
    使用您喜欢的编辑器(如 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

  1. 创建日志文件并设置权限
sudo touch /var/log/ssp.log
sudo chown apache:apache /var/log/ssp.log

步骤四:调整 SELinux 和文件权限

  1. 调整 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

  1. 复制下载
sudo setenforce 0
  1. 重启 Apache 服务以加载所有配置
sudo systemctl restart httpd

步骤五:测试和访问

  1. 打开浏览器,访问您的服务器地址:
http://your-centos-server-ip/ssp

http://your-centos-server-ip/ssp/index.php
  1. 您应该看到 Self Service Password 的登录界面
  2. 进行测试
  • 输入一个 LDAP 中的用户名(uid)。
  • 输入该用户的当前(已过期)密码
  • 输入并确认新密码。
  • 点击“Change”按钮。
  1. 检查结果
  • 如果成功,会显示绿色成功消息。
  • 如果失败,请首先检查 /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 自助密码修改平台。