2016-02-26 71 views
2

我一直在试图创建Windows用户帐户出PHP本身没有问题。我唯一不能做的就是将windows用户密码设置为公司标准密码。 我可以创建,更改和删除用户帐户,除了密码外没有任何问题。每次我创建一个用户并尝试使用凭证登录自己时,我所得到的只是一个“用户名或密码错误”。我检查了用户名。为新的LDAP用户设置密码

我试过到目前为止:有明确的密码($ldaprecord['userPassword'] = "standard";

  • $ldaprecord['userPassword'] = '{MD5}' . base64_encode(pack('H*',md5($newuser_plaintext_password)));就像在给定的例子

    • ldapp_addphp.net
    • 尝试添加用户后更改密码,看到this

    看来我可以更换$ldaprecord['userPassword']但是当我尝试要更改ldaprecord['unicodePwd']服务器不愿意做我的请求。 哪个密码正确?

    我没有通过SSL连接到AD。这是我的错误吗?如果是这样,为什么我可以删除用户但不设置他们的密码?

    在此先感谢。

    编辑:

    询问系统管理员建立通过SSL连接,但他说,轻型目录服务甚至没有安装在DC。在他看来,我直接在AD上工作。对此有何想法?

    使用IIS在Windows 2012 R2上工作。

  • +1

    这是Active Directory,而不是OpenLDAP,对吗?无论如何,我看到你参考了创建Windows用户帐户如果是这样,是的,需要通过SSL/TLS进行加密连接才能更改密码(除非您已经修改了AD,不需要它,这不会被推荐)。另外,通常(假设这是AD ...),您将使用“unicodePwd”属性而不是“userPassword”。没有一些修改,'userPassword'属性在默认情况下不起作用。 – ChadSikorra

    +0

    是的,它是一个活动目录。我将尝试通过SSL建立LDAP连接。困扰我的是,我无法更改或设置没有SSL的密码,但我可以删除用户。 – MrSmith

    +1

    是的,任何时候使用密码属性时,都需要TLS或SSL。如果你使用AD,很可能你应该做一个'ldap_start_tls($ connection)'加密。你可以在'ldap_connect()'调用后直接使用该函数,否则它不能工作。 – ChadSikorra

    回答

    2

    首先我做@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 =”之后使用唯一密钥 。

    谢谢你们的帮助。

    0

    根据this Microsoft article它看起来好像密码存储在一个字段unicodePwd只能设置但不能读取。除此之外,NTLM-Hash和NT-Hash可以存储在SAM-数据库中(这是AFAIK无法通过LDAP访问的),所以你不会有太多的运气通过LDAP更改密码。

    虽然有一篇关于如何通过上述网站引用的LDAP更改Windows200-Password的文章。

    +0

    虽然这几乎总是如此,但应该注意的是可以使用AD中的RFC标准'userPassword'属性来设置密码。但是,您需要尽自己的方法来启用它。一些额外的信息:https://msdn.microsoft.com/en-us/library/cc223249.aspx – ChadSikorra

    +0

    Ooi:你指的是哪个RFC? – heiglandreas

    +0

    RFC 4519,它描述了一个标准的LDAP模式。我认为这是最新的RFC吗?与LDAP相关的RFC并不完全适合阅读(: – ChadSikorra