为新的 LDAP 用户设置密码
set password for new LDAP user
我一直在尝试从 PHP 创建 windows 用户帐户,这本身没有问题。我唯一不能做的就是将 windows 用户密码设置为公司标准密码。
除了密码外,我可以毫无问题地创建、更改和删除用户帐户。每次我创建一个用户并尝试使用凭据登录时,我得到的都是 "username or password wrong"。我检查了用户名。
到目前为止我尝试了什么:
ldapp_add
密码清晰 ($ldaprecord['userPassword'] = "standard";
)
$ldaprecord['userPassword'] = '{MD5}' . base64_encode(pack('H*',md5($newuser_plaintext_password)));
就像 php.net 中的给定示例
- 添加用户后尝试更改密码请参阅this
我似乎可以更改 $ldaprecord['userPassword']
但是当我尝试更改 ldaprecord['unicodePwd']
时,服务器不愿意执行我的请求。
哪个密码正确?
我没有通过 SSL 连接到 AD。这是我的错吗?如果是这样,为什么我可以删除用户但不能设置他们的密码?
提前致谢。
编辑:
要求系统管理员通过 SSL 建立连接,但他说 DC 上什至没有安装轻量级目录服务。在他看来,我直接在 AD 上工作。有什么想法吗?
使用 IIS 开发 Windows 2012 R2。
根据 this Microsoft article 看来密码存储在字段 unicodePwd 中,只能设置不能读取。除此之外,NTLM-Hash 和 NT-Hash 可以存储在 SAM 数据库中(这是 AFAIK,无法通过 LDAP 访问),因此您在通过 LDAP 更改密码时不会有太多运气。
虽然在上述网站上有一篇关于如何通过 LDAP 更改 Windows200-密码的文章。
首先我按照@ChadSikorra 告诉我的那样做了:我创建了文件夹/文件C:\OpenLDAP\sysconf\ldap.conf
并添加了行TLS_REQCERT never
。然而,这对 ldap_start_tls()
没有帮助,但我们的系统管理员检查了 DC,发现没有安装域控制器证书。所以我最终可以通过 ldap_connect("ldaps://mydomaincontroller");
建立连接,这意味着我可以设置 unicodePwd
属性。
下一个问题是 unicodePwd
的编码。这是要走的路:
$newPassword = "mypassword";
$newPassword = "\"" . $newPassword . "\"";
$newPass = mb_convert_encoding($newPassword, "UTF-16LE");
奇怪的是AD添加用户时好像不能设置密码(有办法指正)。相反,您必须在之后设置密码:
$result = ldap_add(...);
$entry = array(
"unicodePwd" => "$newPass",
"pwdLastSet" => 0
);
ldap_modify($connect, $member, $entry);
使用 ldap_add()
设置密码对我不起作用。 pwdLastSet
是强制用户登录后修改密码,$member
是用户的"ID"(如:CN=johndoe, ou=person, dc=mycompany
)。确保
在 "CN=".
之后使用唯一键
谢谢大家的帮助。
我一直在尝试从 PHP 创建 windows 用户帐户,这本身没有问题。我唯一不能做的就是将 windows 用户密码设置为公司标准密码。 除了密码外,我可以毫无问题地创建、更改和删除用户帐户。每次我创建一个用户并尝试使用凭据登录时,我得到的都是 "username or password wrong"。我检查了用户名。
到目前为止我尝试了什么:
ldapp_add
密码清晰 ($ldaprecord['userPassword'] = "standard";
)$ldaprecord['userPassword'] = '{MD5}' . base64_encode(pack('H*',md5($newuser_plaintext_password)));
就像 php.net 中的给定示例
- 添加用户后尝试更改密码请参阅this
我似乎可以更改 $ldaprecord['userPassword']
但是当我尝试更改 ldaprecord['unicodePwd']
时,服务器不愿意执行我的请求。
哪个密码正确?
我没有通过 SSL 连接到 AD。这是我的错吗?如果是这样,为什么我可以删除用户但不能设置他们的密码?
提前致谢。
编辑:
要求系统管理员通过 SSL 建立连接,但他说 DC 上什至没有安装轻量级目录服务。在他看来,我直接在 AD 上工作。有什么想法吗?
使用 IIS 开发 Windows 2012 R2。
根据 this Microsoft article 看来密码存储在字段 unicodePwd 中,只能设置不能读取。除此之外,NTLM-Hash 和 NT-Hash 可以存储在 SAM 数据库中(这是 AFAIK,无法通过 LDAP 访问),因此您在通过 LDAP 更改密码时不会有太多运气。
虽然在上述网站上有一篇关于如何通过 LDAP 更改 Windows200-密码的文章。
首先我按照@ChadSikorra 告诉我的那样做了:我创建了文件夹/文件C:\OpenLDAP\sysconf\ldap.conf
并添加了行TLS_REQCERT never
。然而,这对 ldap_start_tls()
没有帮助,但我们的系统管理员检查了 DC,发现没有安装域控制器证书。所以我最终可以通过 ldap_connect("ldaps://mydomaincontroller");
建立连接,这意味着我可以设置 unicodePwd
属性。
下一个问题是 unicodePwd
的编码。这是要走的路:
$newPassword = "mypassword";
$newPassword = "\"" . $newPassword . "\"";
$newPass = mb_convert_encoding($newPassword, "UTF-16LE");
奇怪的是AD添加用户时好像不能设置密码(有办法指正)。相反,您必须在之后设置密码:
$result = ldap_add(...);
$entry = array(
"unicodePwd" => "$newPass",
"pwdLastSet" => 0
);
ldap_modify($connect, $member, $entry);
使用 ldap_add()
设置密码对我不起作用。 pwdLastSet
是强制用户登录后修改密码,$member
是用户的"ID"(如:CN=johndoe, ou=person, dc=mycompany
)。确保
在 "CN=".
谢谢大家的帮助。