前段时间,我们得出的结论是域中的计算机帐户是杂乱无章的。在完成了对现有帐户进行分类的繁琐工作之后,我们看到新的计算机帐户仍在添加到“计算机”容器中,并且我们不知道它们背后是哪台计算机(服务器/工作站,测试/生产等)。经过一些研究,我们设法阻止每个人都无法将计算机加入域,而无需预先创建计算机帐户(在组织的OU中)。
加入域过程
要加入域,Windows需要一个计算机帐户。Windows尝试按以下顺序使用以下方法获取自己的计算机帐户:
- 搜索名称与自己名称相同的现有帐户。
如果找到了一个匹配帐户(并被禁用),Windows会尝试使用它自己的帐户(写FQDN,重设密码等)。 - 尝试使用默认计算机容器中的用户权限创建新帐户
- 尝试使用“将工作站添加到域”特权在默认计算机容器中创建一个新帐户
关于“将工作站添加到域”的一些知识:
Microsoft打算让用户将自己的工作站加入域中,这可能会减少帮助台上的负载。为此,DC具有一个称为“将工作站添加到域” 的用户权限分配。
默认情况下,经过身份验证的用户是该组的成员,这意味着所有域用户都可以使用此特权。
具有此特权的用户可以在默认计算机容器中最多创建10个(默认)计算机帐户。
每个用户可以创建的帐户限制是在域对象的属性下定义的ms-DS-MachineAccountQuota。要查看它,执行
get-addomain | select -exp DistinguishedName | get-adobject -prop 'ms-DS-MachineAccountQuota' | select -exp ms-DS-MachineAccountQuota
用户已加入的计算机数量是通过对与ms-DS-CreatorSID用户SID相同的计算机进行计数来确定的。要查找使用此特权添加到域的所有计算机,可以尝试
Get-ADComputer -fi {ms-DS-CreatorSID -like '*'}
要查找特定用户使用此特权添加到域的计算机,请执行:
$sid = (get-aduser OneBoredAdmin).SID
Get-ADComputer -fi {ms-DS-CreatorSID -eq $sid}
要获得所有添加了特权的计算机以及添加它们的用户的摘要,请尝试:
get-adcomputer -fi {ms-DS-CreatorSID -like '*'} -prop ms-DS-CreatorSID | group ms-DS-CreatorSID | %{
$ret = $_ | select Count,@{name='UserName';Expression={$_.Name}},@{name='ComputerNames';Expression={$_.Group | select -exp Name}}
# Try to resolve the SID into an account
try{
$_.Name = $_.Name.Translate([System.Security.Principal.NTAccount])
}catch{}
$ret
}
顺便说一句,使用此特权创建帐户时,将使用“域管理员”作为其所有者(而不是创建用户)创建该帐户,并在ms-DS-CreatorSID属性中创建该用户的SID 。
行动计划
注意:虽然这些操作应按计划进行,并防止用户在未准备好计算机帐户的情况下添加计算机,但步骤1将中断DC降级。您可以将默认计算机目录重定向到该过程的另一个OU(请参阅 KB324949),也可以恢复原始权限。由于降级不是日常工作,因此我仍然认为此过程值得一做。
为了防止用户在未预先创建计算机帐户的情况下将计算机加入域,您必须执行以下操作:
- 删除权限以在默认计算机容器上创建计算机帐户。要检查您域中当前的默认计算机容器是什么,您可以尝试:
(Get-ADDomain).ComputersContainer
- 禁止用户使用“将工作站添加到域”特权。可以通过ms-DS-MachineAccountQuota 将域上的属性修改为零,或从DC上的URA中删除“经过身份验证的用户”来完成(使用组策略以确保它也适用于将来的DC)。
只要您不执行这两个步骤,用户仍然可以将计算机添加到域中。
进一步阅读: