![在有或没有 AD 的 Windows 上,密码策略可以是动态的吗](https://linux22.com/image/746402/%E5%9C%A8%E6%9C%89%E6%88%96%E6%B2%A1%E6%9C%89%20AD%20%E7%9A%84%20Windows%20%E4%B8%8A%EF%BC%8C%E5%AF%86%E7%A0%81%E7%AD%96%E7%95%A5%E5%8F%AF%E4%BB%A5%E6%98%AF%E5%8A%A8%E6%80%81%E7%9A%84%E5%90%97.png)
在某些 Windows 服务器上,我想根据密码长度设置不同的密码复杂度。是否可以设置条件,以便我可以在密码长度=8 时获得高复杂度,在密码长度=16 或更大时获得低复杂度或无复杂度。
谢谢你的建议。
答案1
可以为密码标准编写自己的代码。DLL 可以在成员计算机或域控制器上注册。
如果启用“附加 LSA 保护”,则此功能将不起作用,因为它需要由 Microsoft 签名的 LSA DLL。
答案2
正如所指出的,可以利用 passfilt.dll 来利用自定义密码过滤器。事实上,我利用了 GitHub 上提供的这样一个过滤器(或其分支之一)。它被称为开放密码过滤器。我选择使用此过滤器是因为系统管理员关于如何创建和管理自定义密码过滤器的文档很少。虽然我通常看到它用于配置密码黑名单,但应该能够执行您要求的验证。问题是使用自定义密码过滤器做到这一点有多难?
但是,这些更改需要推广到每个域控制器和每个新域控制器。鉴于当今的自动化和配置管理水平,这可能不是特别困难,但这是必须监控和维护的另一件事。
总而言之,这是一个不错的解决方案,但文档有限。您的继任者可能也会难以支持、更新和扩展此解决方案 - 这是决定实施时要考虑的一个因素。
我认为,解决您问题的最直接方法是使用细粒度密码策略。只需进行最少的测试,即可快速实施;这些设置会自动在所有域控制器之间复制。然而,缺点是,它确实需要一些最终用户的参与/选举。
我的解决方案如下:
- 创建两个新的 FGPP
- 1:最小长度为 8;启用复杂性
- 2:最小长度为 16;复杂性已禁用
- 创建两个新的安全组
- 1:pso_MinLength08
- 2:pso_MinLength16
- 将每个组指定为相应 FGPP 的主体
- 告知最终用户他们的选择——要么是短的“复杂”密码,要么是长的“简单”密码。他们可以随时切换,只需通知您即可。
- 根据用户的选择将他们添加到相应的组;您可以将他们默认到短复杂组。
- 按需要更改
关于上述内容的一些说明或其他考虑:
您可以使用单个组实现相同的目的。我倾向于使用两个组,但通过确保默认域密码策略配置为最小长度为 8 并启用复杂性,您可以限制需要进行的组更改次数。- 您只需在用户进行选择时将其添加到组中 - 您不必确保用户只是一个组的成员,或者 - 您不必在每个 FGPP 上配置不同的优先级值
虽然在密码轮换方面我(大部分情况下)都与 NIST 和 Microsoft 保持一致,但我的雇主仍然要求进行密码轮换。我选择“奖励”那些接受较长密码最低长度的用户,方法是每年只轮换一次密码。那些要求较短密码的用户将受到“惩罚”,每季度更改一次密码。在我看来,这种频繁程度太高,毫无用处,但我希望这种烦人的做法能够为用户提供足够的激励,让他们改用较长的密码最低长度。
虽然上面没有提到,但如果您以这种方式使用 FGPP,我肯定会在每个密码设置选项上配置不同的优先级,以确保更改密码时不会出现意外行为。这将解决一个人如果同时是两个组的成员,并且两个 FGPP 上的优先级相等,可能会遇到的问题。
无论您选择哪种方法,我都想指出,您应确保将帐户“krbtgt”排除在任何此类密码复杂性验证之外。我为该帐户和只读域控制器使用的类似帐户设置了单独的 FGPP,以确保其密码更改不受影响。我的 krbtgt FGPP 没有长度、年龄或复杂性要求。