You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境PHP无需COM组件通过管理员账号修改AD用户密码的方法

基于PHP LDAP扩展的AD密码修改方案(Linux环境可用)

前置要求

  • 首先安装启用PHP的ldap扩展,Linux下可通过apt install php-ldap(Debian/Ubuntu)或者yum install php-ldap(CentOS/RHEL)安装,安装后确认php.ini中extension=ldap.so配置已启用
  • AD端必须配置LDAPS(LDAP over SSL/TLS),AD修改密码操作强制要求加密通道,默认使用636端口,需要提前把AD的根证书导入到Linux服务器的信任证书存储中,避免TLS校验失败
  • 操作使用的管理员账号必须拥有对应AD用户的密码重置权限,无需待修改用户的原密码

实现代码

<?php
// AD配置参数
$ldapHost = 'ldaps://替换为你的AD服务器地址'; // 必须使用ldaps协议
$ldapPort = 636;
$adminDn = '管理员账号完整DN,示例:CN=admin,OU=Users,DC=domain,DC=com';
$adminPwd = '管理员账号密码';
$targetUserDn = '待修改用户的完整DN,示例:CN=testuser,OU=Users,DC=domain,DC=com';
$newPwd = '待设置的新密码'; // 必须符合AD的密码复杂度要求

// 初始化LDAP连接
$ldapConn = ldap_connect($ldapHost, $ldapPort);
if (!$ldapConn) {
    die("LDAP连接失败");
}

// 配置LDAP适配AD的参数要求
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3); // AD要求使用LDAPv3协议
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);

// 绑定管理员账号
$bindResult = ldap_bind($ldapConn, $adminDn, $adminPwd);
if (!$bindResult) {
    die("管理员账号绑定失败:" . ldap_error($ldapConn));
}

// 处理密码格式:AD的unicodePwd字段要求为UTF-16LE编码,且前后必须包裹双引号
$encodedNewPwd = mb_convert_encoding('"' . $newPwd . '"', 'UTF-16LE', 'UTF-8');

// 执行密码替换操作
$userData['unicodePwd'] = $encodedNewPwd;
$modifyResult = ldap_mod_replace($ldapConn, $targetUserDn, $userData);

if ($modifyResult) {
    echo "密码修改成功";
} else {
    echo "密码修改失败:" . ldap_error($ldapConn);
}

// 释放连接
ldap_unbind($ldapConn);
ldap_close($ldapConn);
?>

常见问题排查

  • LDAPS连接失败:先检查AD的636端口是否对Linux服务器开放,再通过openssl s_client -connect AD服务器地址:636命令测试证书信任状态,确认Linux服务器已信任AD的SSL证书
  • 权限报错:确认管理员账号拥有目标用户所在OU的重置密码权限,且目标用户的完整DN填写正确
  • 无效属性值报错:确认新密码符合AD的密码复杂度、长度、历史重复限制,且密码编码格式正确,必须为包裹双引号的UTF-16LE编码

内容的提问来源于stack exchange,提问作者John Roberts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:48:03