如果我没有找到与我类似的问题,请原谅,但我已经诚实地搜索了!
首先,我们采用了无默认组方法来确保 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 甚至可能将“用户无法更改密码”选项显示为未选中,即使它本身仍然不起作用。
要测试这是否是事实,请尝试以下操作:
- 打开 ADUC (
dsa.msc
) - 找到有问题的用户帐户并选择特性
- 转到“帐户”标签
- 勾选“用户无法更改密码”复选框
- 点击“应用”
- 取消选中“用户无法更改密码”框
- 点击“确定”
现在测试用户是否真的可以更改他的密码。
为了测试 SDPROP 是否确实是导致此行为的原因,请强制FixUpInheritance
运行该例程(此处使用 PowerShell):
$RootDSE = [ADSI]"LDAP://RootDSE"
$RootDSE.Put("fixupInheritance",1)
$RootDSE.SetInfo()
确保使用管理凭据运行此命令
如果用户运行后无法再更改密码FixUpInheritance
,则 SDPROP 就是罪魁祸首。
无论如何,这里真正的问题是平等对待普通账户和特权账户的做法。
具有管理权限的每个人都应维护 2 个帐户 - 一个普通帐户,没有任何受保护组成员身份 - 以及一个管理员帐户,仅用于执行管理工作,不执行其他任何操作。
请在此处阅读有关此例程的更多信息以及它有时产生的奇怪效果: