我正在将用户从外部系统同步到我们的系统中。我需要在Active Directory中设置用户密码。
我只提供了外部用户密码的SHA1,setPassword
将对我输入的内容进行哈希处理。
unicodePwd
设置为实际哈希字段?
答案 0 :(得分:1)
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哈希值)推送到工作站或AD。由于没有公开此功能的内置命令,我也创建了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。
答案 1 :(得分:0)
据我了解,您无法将unicodePwd
设置为实际的哈希字段。您可以根据需要使用userPasswd
进行自己的检查,但Active Directory不会使用它。
答案 2 :(得分:0)
据我所知,你想要的是不可能的。您可以使用至少三种不同的协议在AD中更改/设置密码:
100%确定无法使用LDAP,但您可能需要检查其他两个,因为可能有某种方法可以使用它们。