2010-07-22 69 views
5

我正在將用戶從外部系統同步到我們的系統。我需要在我們的Active Directory中設置用戶的密碼。將Active Directory密碼哈希設置爲SHA1值?

我只提供SHA1的外部用戶密碼,並且setPassword會散列我輸入的任何內容。

  • 是否將用戶的unicodePwd設置爲實際的散列字段?
    • 如果是這樣,我可以將它設置爲提供的哈希?
    • 如果不是,我可以如何設置活動目錄存儲的散列?

回答

0

據我瞭解,你不能設置unicodePwd實際哈希場。您可以根據自己的需要使用userPasswd進行檢查,但它並不是Actives Active Directory所使用的。

0

據我所知,你想要的是不可能的。您可以使用至少三種不同的協議改變AD /設置密碼:

上午100%確定無法使用LDAP,但您可能需要檢查另外兩個,因爲可能有一些方法可以使用它們。

0

AD不存儲一種類型的散列。當您更改密碼時,DC會收到密碼的純文本版本,檢查其複雜性,然後生成並存儲MD4,MD5,PBKDF2(4096 * SHA1)和其他幾種散列。這是因爲每個認證機制(NTLM,Kerberos,Digest,...)使用不同的散列函數,AD需要全部支持。

密碼哈希存儲在這些AD屬性中:unicodePwd,dBCSPwd,lmPwdHistory,ntPwdHistory和supplementalCredentials。出於安全原因,您無法通過LDAP或ADSI讀取它們。不過,我最近發現了一種方法來檢索他們創建了一個PowerShell cmdlet,可以這樣做:

Get-ADReplAccount -SamAccountName John -Domain Contoso -Server LON-DC1 

還有通過遺留SAMR protocol推MD4哈希(AKA NT哈希)到工作站或廣告中的不良記錄方式。由於沒有公開此功能的內置命令,因此我也創建了PowerShell cmdlets

要生成一個NT哈希,您可以使用此PowerShell命令:

$hash = ConvertTo-NTHash (Read-Host -AsSecureString) 

最後,這個命令推動NT哈希AD:

Set-SamAccountPasswordHash -SamAccountName john -Domain ADATUM -NTHash $hash -Server dc1.adatum.com 

這些命令可以用來遷移本地和域帳戶之間或AD和Samba之間的密碼。但要小心,Kerberos-AES和WDigest身份驗證不適用於此帳戶,只能使用NTLM和Kerberos-RC4。