Windows 2008 r2 不使用默认安全组(即域管理员)无法更改自己的密码

Windows 2008 r2 不使用默认安全组(即域管理员)无法更改自己的密码

如果我没有找到与我类似的问题,请原谅,但我已经诚实地搜索了!

首先,我们采用了无默认组方法来确保 Active Directory 的安全。这种方法非常成功。但是,我们有一个 bug bear,它让所有现场高级管理员都感到沮丧,因为他们需要请另一位管理员为他们更改密码。这不是我们想要的理想情况,不知道是否有其他人遇到过同样的问题。

这里的关键信息是我们正在使用终端服务来远程控制 DC,并使用服务器上的用户和计算机管理单元来重置密码。

此外,我还发现将用户置于企业管理员组中可以更改密码。但我无论如何也想不出要添加/更改哪些 acl/dacl,才能让我们的组在未向用户添加企业管理员角色的情况下运行。

答案1

您已经感受到安全描述符传播器(SDPROP)的强大功能和烦恼。

为了保护“关键对象”,Active Directory 会尝试跟踪属于一个或多个受保护组的所有对象。这些对象包括:

Account Operators
Administrators
Backup Operators
Domain Admins
Domain Controllers
Enterprise Admins
Print Operators
Read-only Domain Controllers
Schema Admins
Server Operators

所有属于这些组的帐户将自动具有一个名为的属性,该属性AdminCount的值设置为1- 如果您在用户仍然是其中一个受保护组的成员时取消设置此属性,它将很快重新出现。

目的是确保这些对象的对象 ACL 不会受到过多干扰,以致于它们在功能上“中断”(试想一下,一个邪恶的域管理员试图剥夺您在管理员帐户上的所有权利)。

为了维护关键对象的 ACL,AdminSDHolder所有 Active Directory 默认命名上下文分区中都存在一个名为的引用对象。
在固定间隔内,SDPROP 会调用FixUpInheritance本地 DSA 上的例程。FixUpInheritance除其他事项外,该例程检查所有对象的属性AdminCount,并将调用的引用对象的 ACLAdminSDHolder应用于关键对象。

由于此特定权限的实现方式,此 ACL-“修复”具有令人讨厌的副作用,即剥夺用户帐户的“更改密码”权限,除非帐户本身已经通过身份验证并具有企业管理员组成员身份。Active Directory 用户和计算机 mmc 甚至可能将“用户无法更改密码”选项显示为未选中,即使它本身仍然不起作用。

要测试这是否是事实,请尝试以下操作:

  1. 打开 ADUC ( dsa.msc)
  2. 找到有问题的用户帐户并选择特性
  3. 转到“帐户”标签
  4. 勾选“用户无法更改密码”复选框
  5. 点击“应用”
  6. 取消选中“用户无法更改密码”框
  7. 点击“确定”

现在测试用户是否真的可以更改他的密码。

为了测试 SDPROP 是否确实是导致此行为的原因,请强制FixUpInheritance运行该例程(此处使用 PowerShell):

$RootDSE = [ADSI]"LDAP://RootDSE"
$RootDSE.Put("fixupInheritance",1)
$RootDSE.SetInfo()

确保使用管理凭据运行此命令

如果用户运行后无法再更改密码FixUpInheritance,则 SDPROP 就是罪魁祸首。

无论如何,这里真正的问题是平等对待普通账户和特权账户的做法。

具有管理权限的每个人都应维护 2 个帐户 - 一个普通帐户,没有任何受保护组成员身份 - 以及一个管理员帐户,仅用于执行管理工作,不执行其他任何操作。

请在此处阅读有关此例程的更多信息以及它有时产生的奇怪效果:

AdminSDHolder、受保护组和 SDPROP - TechNet 杂志 2009

相关内容