我有一个在 Windows 2003 上运行的域,采用 2000 模式。我正在尝试创建一个 AD 组来向用户授予临时域管理员权限,以避免向他们授予永久 DA。
我已经在 OU:Groups/Admin/Delegated Permissions 中创建了一个 AD 组:g.Temp_DomainAdmin。
我有一个运行 VBScript 的计划任务来从该组中删除所有用户。
该任务以服务帐户运行,具有有限的权限:s.purge_temp_da
我已将 OU 的权限委托给服务帐户,以允许完全控制其下的组。
手动运行任务非常完美。但每当它在午夜运行时,它就会失败并显示“-2147024891 - 一般访问被拒绝错误”。查看 g.Temp_DomainAdmin 组会发现委派的权限已消失。
有什么想法吗?这是 VBScript:
Option Explicit
Dim objRootDSE, strDomain, objGroup, objUser, strdistinguishedName, arrDnComponents
Const ADS_PROPERTY_DELETE = 4
' Retrieve domain information
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.Get("DefaultNamingContext")
' Bind to the group
Set objGroup = GetObject("LDAP://CN=G.ADM.Temp_DomainAdmin,OU=Delegated Permissions,OU=Admin,OU=Resource Access,OU=groups," & strDomain)
' Iterate through the user objects in the group
For Each objUser In objGroup.Members
on error resume next
' Get the users distinguishedName
strdistinguishedName = objUser.distinguishedName
wscript.echo "Removing " & objUser.cn
' Remove the user from the group
objGroup.PutEx ADS_PROPERTY_DELETE, "member", Array(strdistinguishedName)
objGroup.SetInfo
wscript.echo "Removed " & objUser.cn
if err.number <> 0 then
wscript.echo err.number & " - " & err.description
end if
on error goto 0
Next
wscript.echo "Done"
谢谢
答案1
您正在体验 Active Directory 的“adminSDHolder”和“SDProp”功能的影响。此功能的目的是将已知 ACL 应用于属于特殊受保护组的安全主体(用户、组和计算机)。您的“g.Temp_DomainAdmin”组作为“Domain Admins”的成员,已被标记为“adminCount”值“1”,现在受“adminSDHolder”的约束。当此线程运行时,您的“g.Temp_DomainAdmin”组的 ACL 将重置为已知 ACL。(Microsoft对此功能有更详细的描述如果您想了解更多详情。
你可以修改 adminSDHolder ACL以允许您尝试执行的操作,但通常不推荐这种做法。
由于您的脚本有权添加/删除“域管理员”组的成员,因此您最好以具有“域管理员”成员身份的用户身份运行该脚本,从而避免委派脚本的任何权限。 (基本上,如果某人“拥有”脚本执行上下文,即使您尝试安排委派,他们仍然可以使用该脚本将自己添加到“域管理员”中。 委派使事情变得复杂,并且没有提供真正的安全性。)