2016-02-26 70 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