活动目录现在应该是各大企业单位管理用户,资源的有利武器和基础结构,那么DC的安全就尤为重要。特别是密码策略。在活动目录中,微软为大家提供了非常多的强密码策略,大家可以按照自己企业单位的需要制定出一套安全策略应用于生产环境中。
但是这同时又有一些限制,在Windows server 2000和2003时代,密码策略只能指派到域(Site)上,不能单独应用于活动目录中的对象。换句话说,密码策略在域级别起作用,而且一个域只能有一套密码策略。 统一的密码策略虽然大大提高了安全性,但是提高了域用户使用的复杂度。比如企业管理员的帐户安全性要求非常高,需要超强策略,比如密码需要一定长度、需要经常更改管理员密码而且不能使用上几次的密码;但是普通的域用户并不需要如此高的密码策略,也不希望经常更改密码并使用很长的密码,超强的密码策略并不适合他们。另一方面,对于一些服务账户(比如Exchange server,SQL server系统账户),我们需要它的密码长度很长很复杂,但是又不能有锁定阀值,万一一旦有人恶意猜测导致锁定服务,那么也是一种***方式。

为解决这个问题,微软在Windows server 2008的活动目录中引入了多元密码策略(Fine-Grained Password Policy)的概念。多元密码策略允许针对不同用户或全局安全组应用不同的密码策略,例如:
A.可以为管理员组指派超强密码策略,密码16位以上、两周过期;

B.为服务帐号指派中等密码策略,密码30天过期,不配置密码锁定策略;
C.为普通域用户指派密码90天过期等。
多元密码策略满足了不同用户对于安全性的不同要求。多元密码策略虽然满足了不同级别用户对于密码安全性的要求,但是配置多个密码策略为管理员增加了管理复杂度,管理起来也不是很方便。那么现在我们就来讨论如何设置多元密码策略。
部署注意点
多元密码策略部署要求有以下几点:
A. 所有域控制器都必须是Windows Server 2008;
B. 域功能级别为2008 Domain Functional Mode(森林功能级别可以是2003级别)
C. 如果一个用户和组有多个密码设置对象(PSO,可以把PSO理解为和组策略对象GPO类似,通俗的理解为就是一条条的密码策略),那么优先级最小的PSO将最终生效;
D. 可以使用ADSIEDIT或者LDIFDE或者powershell第三方工具进行管理;
E. 多元密码策略只能应用于活动目录中的用户和全局安全组,而不能应用于活动目录中的计算机对象、非域内用户和组织单元OU。

OK,在这篇文章中,我会首先给大家介绍如何使用ADSIEdit配置多元密码策略。
首先,保证域功能级别是2008 Domain Functional Mode,然后在DC撒谎那个打开“活动目录用户和计算机”,创建一个PSOtestgroup的全局安全组,然后创建一个PSOtestuser的用户,将用户加入该组中。




我们可以首先在“活动目录和计算机”中看到在system容器下有个Password Setting Container这个容器,我们右键点击这个容器只能新建查询,而不能新建object,因为我们的多元密码策略是在ADSIEDIT中配置的。


打开ADSIEdit,连接上现在的shanghai.conanhan.com这个DC,然后在system容器下找到Password Setting Container右击新建object。


出现新建对象窗口,类别只有一个密码设置,点击下一步,接下来为PSO取个有意义的名字,便于自己管理


接下来修改msDS-PasswordSettingsPrecedence属性,也就是设置密码的优先级,尽管此处可以输入零或者负数,但是要想真正生效的话,此处输入的数值必须大于零。前面说过,数值越小,优先级越高。


接下来修改msDS-PasswordReversibleEncryptionEnabled属性,也就是是否启用用户帐户的密码可还原的加密状态。可接受输入的布尔值为FALSE/TRUE。为了安全着想(开启后可以用工具逆向DUMP出用户的密码),如果没有特殊需求,建议设置为FALSE。


接下来修改msDS-PasswordHistoryLength属性,也就是设置用户帐户的密码历史长度。有时候翻译为强制密码历史。可接收输入的值为0到1024。默认是24个。


接下来修改msDS-PasswordComplexityEnabled属性,也就是是启用户帐户的密码复杂性要求。为了安全考虑,建议设置为TRUE。


接下来修改msDS-MinimumPasswordLength属性,也就是设置用户帐户的最短密码长度。可接收输入的值为0到255.


接下来修改msDS-MinimumPasswordAge属性,也就是设置用户帐户密码的最短使用期限。默认必须是使用1天后才能再次更改密码。可以接受输入的格式为00:00:00:00。这4段分别表示为多少天、多少小时,多少分,多少秒。这里只可以输入1天的整数倍,不要输入什么0.5天,1.5天等。如果你输入00:12:00:00也就是半天,尽管可以继续下去,但是不会生效。请注意这一点。我这里输入可以立即更改密码,也就是00:00:00:00。


接下来修改msDS-MaximumPasswordAge属性,也就是设置用户帐户的最长密码期限。默认是42天。和前面那个属性一样,可以接受输入的格式为持续时间格式


接下来修改msDS-LockoutThreshold 属性,也就是设置用户帐户锁定的锁定阈值。默认没有限制。可以接受的输入范围是0到65535。


接下来修改msDS-LockoutObservationWindow属性,也就是设置用户帐户锁定的观察窗口时间。这个设置可以有点不太好理解。通俗点解释就是多长时间复位帐户锁定计数器。比如是30分钟内输入3次就锁定账号。那么一个用户在30分钟内输入错误密码2次后,如果他在接下来的30分钟内停止继续尝试输入错误密码,那么半个小时后他又可以继续输入3次错误密码了。可以接受输入的格式为持续时间格式。我这里输入30分钟后复位。


接下来修改msDS-LockoutDuration属性,也就是设置锁定用户帐户的锁定持续时间。可以接受输入的格式为持续时间格式。



下一步我们将 PSO 应用到用户和/或全局安全组,不要点击“完成”,点击“更多属性”。在“选择一个要查看的属性”处选择msDS-PSOAppliesTo ,它用来设置此密码设置对象PSO所应用到的对象,只能链接到用户或全局安全组的 0 个或多个 DN。我将它连接到之前创建的PSOtestgroup全局安全组。完成以后点击“确定”。至此,PSO的创建、链接工作至此完成


接下来我们来检验效果,在命令提示符中输入dsget user "CN=PSOtestuser,DC=conanhan,DC=com" –effectivepso


注:
a. 如果以上命令没有返回任何PSO 名称,则表示“默认域策略”已应用到指定的用户帐户。
b. 不能直接对安全组查看生效的密码策略,只能查看用户。
c. 不要尝试对用户通过组策略管理工具GPMC使用组策略建模或者组策略结果向导以查看他是否拿到了新密码策略,也不要尝试使用账号登录系统后运行net accounts命令。这些命令、工具都无法查看到账户目前应用的密码策略。它们均只能查看默认域密码策略。


我们在用图形化来修改用户密码来测试一下是否应用,我修改的新密码是不满足密码长度的。



OK,至此用ADSIEDIT编辑PSO已经完成,稍后我再给大家介绍如何使用LDIFDE配置多元密码策略。