定期检查 Active Directory 中的非活动用户帐户并将其移除 - Microsoft Engage Center (Services Hub)

为什么考虑这种情况

根据上次更改密码的时间或用户最后一次登录时间戳,Active Directory 中已有超过 10% 的用户帐户被检测为非活动(过时)帐户。 Active Directory 中的过期用户帐户是重大的安全风险,因为它们可能会被网络攻击者或以前的员工利用。 这些非活动帐户还会占用可回收的数据库空间。

观看客户工程师解释问题

上下文和最佳做法

Active Directory 包含每个用户的帐户。 随着时间的推移,用户会离开组织,并且这些用户帐户可能无法从 Active Directory 中删除。 过时的用户帐户是重大的安全问题,因为以前的员工和外部恶意行为者可能会利用这些帐户攻击组织。 过时的帐户也会占用目录数据库中可以收回的空间。

用户帐户有一个名为 PasswordLastSet 的属性,记录用户上次更改其密码的时间。 由于 PasswordLastSet 是复制属性,因此只能查询每个域的一个域控制器。

Windows Server 2003 引入了一项被称为 lastLogonTimeStamp 的新属性,以帮助识别潜在的过时帐户。 此属性可以在设置为 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 或 Windows Server 2012 R2 功能级别的域中激活。 与自 Windows NT 4.0 版本起就可用的 lastLogon 属性不同,lastLogonTimeStamp 每更新一次就会被复制一次。 由于每个域只须查询一个域控制器,因此查询此属性更方便。

若要查找帐户,请运行一个脚本以查询 Active Directory 中的非活动用户帐户。 在“用于 Windows PowerShell 的 Active Directory 模块”中,Search-ADAccount AccountInactive UsersOnly 命令返回所有的非活动用户帐户。 使用 -DateTime 或 -TimeSpan 开关缩小计算机上次登录的日期范围。

备注

Lastlogontimestamp 不会在每次有人登录时复制。 有关更多信息,请参阅了解 AD 帐户属性 - LastLogon、LastLogonTimeStamp 和 LastLogonDate

处理过时的用户帐户通常归结为实施有效的取消设置流程。 但是,用户可能无法工作,因此很长一段时间不会登录。 另外,服务帐户也可能很长一段时间不会登录。 因此,你应包含多重检查并具有适当的保障,以帮助防止禁用或删除仍在使用的帐户。

建议措施

你应执行定期检查,以查找最近六个月未更改其密码的任何用户帐户,然后禁用这些帐户并将其从 Active Directory 中删除。

在每个域中运行一个脚本,用于查询 Active Directory 中密码期限超过一定时间的用户帐户。 在用于 Windows PowerShell 的 Active Directory 模块中,运行以下脚本将列出最近六个月密码未更改的用户帐户。

$d = [DateTime]::Today.AddDays(-180)

Get-ADUser -Filter '(PasswordLastSet -lt $d) -or (LastLogonTimestamp -lt $d)' -Properties PasswordLastSet,LastLogonTimestamp | ft Name,PasswordLastSet,@{N="LastLogonTimestamp";E={[datetime]::FromFileTime($_.LastLogonTimestamp)}}

识别出过期的帐户后,建议禁用这些用户帐户,然后等待几周,如果未报告任何问题,再删除这些帐户。