委派权限不可用且继承被自动禁用

文章翻译 文章翻译
文章编号: 817433 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

在升级到 Microsoft Windows Server 2003 后,您可能会遇到下列症状:
  • 组织单位中的所有用户均不能使用委派权限。
  • 对于某些用户帐户,大约每隔一小时自动禁用一次继承
  • 以前具有委派权限的用户不再具有这些权限。
如果将 Microsoft 知识库文章 327825 中介绍的修补程序应用到 Microsoft Windows 2000 Server 或者在 Microsoft Windows 2000 Server 上安装了 Windows 2000 Service Pack 4,也可能会出现此问题。 有关 Windows 2000 327825 修补程序的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
327825 针对用户属于多个组时出现的 Kerberos 验证问题的新解决方案

原因

在使用“控制委派”向导委派权限时,这些权限依赖于从父容器继承权限的用户对象。受保护组中的成员不能从父容器继承权限。因此,如果使用“控制委派”向导设置权限,则这些权限不适用于受保护组中的成员。

注意:可使用一个或多个安全组或通讯组将受保护组的成员身份定义为直接成员身份或可传递成员身份。包括通讯组的原因是它们可以转换为安全组。

在 Windows Server 2003 中,增加了受保护组的数目,以提高 Active Directory 的安全性(请参见“更多信息”一节)。如果将 327825 修补程序应用到 Windows 2000,则受保护组的数目还会增加。

解决方案

要解决此问题,可以安装一个修补程序。必须将修补程序安装到符合以下条件的域控制器:在每个域中拥有主域控制器 (PDC) 模拟器操作主机角色。此外,如果当前 PDC 模拟器操作主机的角色拥有者无效,则必须在用于接管此角色的所有域控制器上安装此修补程序。如果不确定要用来接管此角色的域控制器,建议您考虑在所有域控制器上安装此修补程序。如果未安装此修补程序的域控制器接管 PDC 模拟器操作主机角色,则会再次重设用户权限。

Windows 2000 修补程序信息

Microsoft 现在提供了一个受支持的修补程序,但该程序只用于解决本文中描述的问题。只有在系统遇到此特定问题时,才能应用该修补程序。

要解决此问题,请与 Microsoft 产品支持服务联系,以获取此修补程序。要获取 Microsoft 产品支持服务电话号码和支持费用信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意:特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新能够解决您的问题,可免收通常情况下收取的电话支持服务费用。对于特定更新无法解决的其他支持问题和事项,将照常收取支持费用。

重新启动要求

应用此修补程序后,必须重新启动计算机。

修补程序替代信息

此修补程序不替代任何其他修补程序。

文件信息

此修补程序的英文版具有下表中列出的文件属性(或更新的文件属性)。这些文件的日期和时间按协调世界时 (UTC) 列出。当您查看文件信息时,该时间将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”项的“时区”选项卡。
   日期         时间   版本            大小    文件名
----------------------------------------------------------
24-Mar-2004  02:17  5.0.2195.6876    388,368  Advapi32.dll     
24-Mar-2004  02:17  5.0.2195.6866     69,904  Browser.dll      
24-Mar-2004  02:17  5.0.2195.6824    134,928  Dnsapi.dll       
24-Mar-2004  02:17  5.0.2195.6876     92,432  Dnsrslvr.dll     
24-Mar-2004  02:17  5.0.2195.6883     47,888  Eventlog.dll     
24-Mar-2004  02:17  5.0.2195.6890    143,632  Kdcsvc.dll       
11-Mar-2004  02:37  5.0.2195.6903    210,192  Kerberos.dll     
21-Sep-2003  00:32  5.0.2195.6824     71,888  Ksecdd.sys
11-Mar-2004  02:37  5.0.2195.6902      520,976  Lsasrv.dll       
25-Feb-2004  23:59  5.0.2195.6902       33,552  Lsass.exe        
19-Jun-2003  20:05  5.0.2195.6680    117,520  Msv1_0.dll              
24-Mar-2004  02:17  5.0.2195.6897    312,592  Netapi32.dll     
19-Jun-2003  20:05  5.0.2195.6695    371,984  Netlogon.dll     
10-Aug-2004  00:17  5.0.2195.6966    933,648  Ntdsa.dll                
24-Mar-2004  02:17  5.0.2195.6897    388,368  Samsrv.dll       
24-Mar-2004  02:17  5.0.2195.6893    111,376  Scecli.dll       
24-Mar-2004  02:17  5.0.2195.6903    253,200  Scesrv.dll       
04-Jun-2004  23:13  5.0.2195.6935  5,887,488  Sp3res.dll              
24-Mar-2004  02:17  5.0.2195.6824     50,960  W32time.dll      
21-Sep-2003  00:32  5.0.2195.6824     57,104  W32tm.exe

Windows Server 2003 Service Pack 信息

要解决此问题,请获取 Windows Server 2003 的最新 Service Pack。有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
889100 如何获取 Windows Server 2003 的最新 Service Pack

Windows Server 2003 修补程序信息

Microsoft 目前提供了一个受支持的修补程序。但是,此修补程序仅用于修复本文所述的问题。请仅将此修补程序应用于出现这一特定问题的系统。此修补程序可能还会接受进一步的测试。因此,如果这个问题没有给您造成严重的影响,我们建议您等待包含此修补程序的下一个 Service Pack。

要解决该问题,请向 Microsoft 在线客户服务提交请求以获取修补程序。要提交联机请求以获取修补程序,请访问下面的 Microsoft 网站:
http://go.microsoft.com/?linkid=6294451
注意:如果发生其他问题或需要进行任何疑难解答,则您可能需要创建单独的服务请求。对于此特定修补程序无法解决的其他支持问题和事项,将照常收取支持费用。要创建单独的服务请求,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
此修补程序的英文版具有下表中列出的文件属性(或更新的文件属性)。这些文件的日期和时间按协调世界时 (UTC) 列出。当您查看文件信息时,该时间将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”项的“时区”选项卡。

重新启动要求

应用此修补程序后,必须重新启动计算机。

修补程序替代信息

此修补程序不替代任何其他修补程序。

文件信息

Windows Server 2003 32 位版本
   日期         时间   版本            大小    文件名
--------------------------------------------------------
02-Nov-2004  01:26  5.2.3790.229  1,532,416  Ntdsa.dll
02-Nov-2004  01:26  5.2.3790.212     32,768  Ntdsatq.dll
19-Sep-2004  11:41  5.2.3790.212     59,392  Ws03res.dll
Windows Server 2003 64 位版本
   日期         时间   版本        大小       文件名      平台
-------------------------------------------------------------------
02-Nov-2004  01:21  5.2.3790.229  4,057,088  Ntdsa.dll     IA-64
02-Nov-2004  01:21  5.2.3790.212     82,432  Ntdsatq.dll   IA-64
19-Sep-2004  09:43  5.2.3790.212     58,880  Ws03res.dll   IA-64
19-Sep-2004  11:41  5.2.3790.212     59,392  Wws03res.dll    x86
在 Windows 2000 和 Windows Server 2003 中安装修补程序后,可以设置全林性“dsHeuristic”标志,以控制哪些操作员组可以受到“adminSDHolder”的保护。通过使用这个新选项,您可以将四个已登记的受保护中的一些或全部重新设置为原始 Windows 2000 行为。字符位置 16 代表一个十六进制值,而最左侧的字符处于位置 1,因此唯一有效值介于“0”到“f”之间。每个操作员组都具有一个如下所示的特定位:
  • Bit 0 :Account Operators
  • Bit 1 :Server Operators
  • Bit 2 :Print Operators
  • Bit 3 :Backup Operators
例如,值 0001 表示排除 Account Operators。由于二进制总数 1100 反映 0xC 的十六进值,因此值“c”将排除 Print Operators (0100) 和 Backup Operators (1000)。

您必须修改配置容器中的对象,才能启用新的功能。这是一种全林性设置。要修改此对象,请执行下列步骤:
  1. 找到要修改的对象。 有关具体操作方法的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    326690 在 Windows Server 2003 域控制器上禁止对 Active Directory 执行匿名 LDAP 操作
  2. 在命令提示符处,键入 ldp.exe 然后按 Enter,启动 LDP 实用工具。
  3. 依次单击“连接”、“连接”,然后单击“确定”。
  4. 依次单击“连接”、“绑定”,键入林根管理员的用户名和密码,然后单击“确定”。
  5. 依次单击“查看”、“树”,然后单击“确定”。
  6. 使用“查看”\“树”打开下面的配置 CN:
    CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=Forest root domain
  7. 找到“目录服务”对象,然后双击该对象。
  8. 查看右侧列出的对象属性,确定是否已设置“dsHeuristics”属性。如果已设置,请将现有值复制到剪贴板。
  9. 右键单击左侧的“目录服务”对象,然后单击“修改”。
  10. 键入 dsHeuristics 作为属性名称。
  11. 键入 000000000100000f 作为值。用 dsHeuristics 中已有的值替换该值开头部分的零。确保数字计数(不超过“f”)或任何要设置的位计数正确。

    注意:要验证是否修改了正确的字符,每个以十为基数的字符必须设置为除以十后所得的字符数。例如,第十个字符必须是 1,第二十个字符必须是 2,第三十个字符必须是 3,依此类推。
  12. 如果此属性已存在,请单击“操作”框中的“替换”。否则,单击“添加”。
  13. 按“操作”组右侧的 Enter,将该属性添加到 LDAP 事务中。
  14. 单击“运行”,将此更改应用到对象。将此更改复制到林中的 PDC 模拟器后,运行此修补程序的一些 PDC 模拟器不会保护作为已为其设置位的操作员组成员的用户。

替代方法

要变通解决此问题,请使用下列方法之一。

方法 1:确保成员不是受保护组的成员

如果使用在组织单位级别委派的权限,应确保需要委派权限的所有用户不是某个受保护组的成员。对于以前曾是受保护组成员的用户,如果从受保护组中删除该用户,则不会自动重设继承标志。为此,可以使用下面的脚本。

注意:此脚本将检查其 AdminCount 被设置为 1 的所有用户的继承标志。如果继承被禁用(设置了 SE_DACL_PROTECTED),则此脚本将启用继承。如果已启用继承,则仍保持为启用状态。此外,AdminCount 将被重置为 0。当 adminSDHolder 线程再次运行时,它将禁用继承,并将仍属于受保护组的所有用户的 AdminCount 设置为 1。因此,将为不再是受保护组成员的所有用户正确设置 AdminCount 和继承。

使用以下命令来运行此脚本:
cscript /nologo resetaccountsadminsdholder.vbs
Microsoft 提供的编程示例只用于演示目的,不附带任何明示或暗示的保证。这包括但不限于对适销性或特定用途适用性的暗示保证。本文假定您熟悉所演示的编程语言和用于创建和调试过程的工具。Microsoft 的支持工程师可以帮助解释某个特定过程的功能,但是他们不会修改这些示例以提供额外的功能或构建过程以满足您的特殊需求。
'********************************************************************
'*
'* File:           ResetAccountsadminSDHolder.vbs 
'* Created:        November 2003
'* Version:        1.0
'*
'*  Main Function:  Resets all accounts that have adminCount = 1 back
'*	to 0 and enables the inheritance flag
'*
'*  ResetAccountsadminSDHolder.vbs 
'*
'* Copyright (C) 2003 Microsoft Corporation
'*
'********************************************************************

Const SE_DACL_PROTECTED = 4096

On Error Resume Next

Dim sDomain
Dim sADsPath
Dim sPDC


Dim oCon 
Dim oCmd
Dim oRst
Set oRst = CreateObject("ADODB.Recordset")
Set oCmd = CreateObject("ADODB.Command")
Set oCon = CreateObject("ADODB.Connection")

Dim oRoot
Dim oDomain
Dim oADInfo
Dim oInfo
Set oADInfo = CreateObject("ADSystemInfo")
Set oInfo = CreateObject("WinNTSystemInfo")
sPDC = oInfo.PDC & "." & oADInfo.DomainDNSName

oCon.Provider = "ADSDSOObject"
oCon.Open "Active Directory Provider"

oCmd.ActiveConnection = oCon

Set oRoot = GetObject("LDAP://rootDSE")
sDomain = oRoot.Get("defaultNamingContext")
Set oDomain = GetObject("LDAP://" & sDomain)
sADsPath = "<" & oDomain.ADsPath & ">"

oCmd.CommandText = "SELECT ADsPath FROM 'LDAP://" & sPDC & "/" & sDomain & "' WHERE objectCategory='person' and objectClass = 'user' AND adminCount = 1"
Set oRst = oCmd.Execute

WScript.Echo "searching for objects with 'admin count = 1' in " & sDomain

If oRst.RecordCount = 0 Then
    WScript.Echo "no accounts found"
    WScript.Quit
End If

Do While Not oRst.EOF
    WScript.Echo  "found object " & oRst.Fields("ADsPath")
    If SetInheritanceFlag(oRst.Fields("ADsPath")) = 0 Then WScript.Echo "Inheritance flag set"
    If SetAdminCount(oRst.Fields("ADsPath"), 0) = 0 Then WScript.Echo "adminCount set to 0"
    WScript.Echo  "=========================================="
    oRst.MoveNext
Loop


Private Function SetInheritanceFlag(DSObjectPath)

    Dim oSD
    Dim oDACL
    Dim lFlag
    Dim oIADs

    Set oIADs = GetObject(DSObjectPath)

    Set oSD = oIADs.Get("nTSecurityDescriptor")

    If oSD.Control And SE_DACL_PROTECTED Then
        oSD.Control = oSD.Control - SE_DACL_PROTECTED
    End If

    oIADs.Put "nTSecurityDescriptor", oSD
    oIADs.SetInfo
    
    If Err.Number <> 0 Then
        SetInheritanceFlag = Err.Number
    Else
        SetInheritanceFlag = 0
    End If

End Function


Private Function SetAdminCount(DSObjectPath, AdminCount)

    Dim oIADs
    Dim iAdminCount

    Set oIADs = GetObject(DSObjectPath)

    iAdminCount = oIADs.Get("adminCount")

    If iAdminCount = 1 Then iAdminCount = 0

    oIADs.Put "adminCount", iAdminCount
    oIADs.SetInfo
    If Err.Number <> 0 Then
        SetAdminCount = Err.Number
    Else
        SetAdminCount = 0
    End If
    
End Function
为了确保不会对用户造成负面影响,建议您首先使用 Ldifde.exe 转储将 AdminCount 设置为 1 的用户。为此,请在命令提示符处键入下面的命令,然后按 Enter:
ldifde -f Admincount-1.txt -d dc=your domain -r "(&(objectcategory=person)(objectclass=user)(admincount=1))"
检查输出文件,以确认要清除 DACL 保护位的所有用户是否具有仅使用已继承的访问控制条目 (ACE) 的正确权限。这是首选方法,不会降低现有安全性。

方法 2:对 adminSDHolder 容器启用继承

如果对 adminSDHolder 容器启用继承,则受保护组中的所有成员会启用已继承的权限。就安全功能而言,此方法会将 adminSDHolder 容器的行为还原为 Service Pack 4 之前的功能。

对 adminSDHolder 容器启用继承

如果对 adminSDHolder 容器启用继承,则会禁用两个访问控制列表 (ACL) 保护机制中的任一个,并应用默认权限。不过,如果在组织单位级别启用继承,则受保护组中的所有成员将从组织单位和任何父组织单位继承权限。

要为管理用户提供继承保护,请将所有管理用户(以及需要继承保护的其他用户)移至他们自己的组织单位。在组织单位级别,删除继承然后将权限设置为与 adminSDHolder 容器上当前的 ACL 相匹配。由于 adminSDHolder 容器上的权限可能会有所不同(例如,Microsoft Exchange Server 添加了某些权限或者某些权限可能已被修改),因此需针对 adminSDHolder 容器上的当前权限,查看受保护组中的成员。请注意,用户界面 (UI) 不显示 adminSDHolder 容器上的所有权限。可以使用 DSacls 查看 adminSDHolder 容器上的所有权限。

可以使用“ADSI 编辑”或“Active Directory 用户和计算机”对 adminSDHolder 容器启用继承。adminSDHolder 容器的路径为 CN=adminSDHolder,CN=System,DC=<MyDomain>,DC=<Com>

注意:如果使用“Active Directory 用户和计算机”,请确保选中“查看”菜单上的“高级功能”。

对 adminSDHolder 容器启用继承:
  1. 右键单击该容器,然后单击“属性”。
  2. 单击“安全”选项卡。
  3. 单击“高级”。
  4. 单击以选中“允许将可继承权限传播到该对象和所有子对象”复选框。
  5. 单击“确定”,然后单击“关闭”。
下次运行 SDProp 线程时,系统会对受保护组中的所有成员设置继承标志。此过程可能最多需要 60 分钟。应预留充足的时间进行此更改,以便从主域控制器 (PDC) 进行复制。

方法 3:防止继承和只更改 ACL

如果不希望属于受保护组的用户从其所在的容器继承权限,并且只想更改用户对象的安全性,则可以对 adminSDHolder 容器目录的安全性进行编辑。在这种情况下,不必对 adminSDHolder 容器启用继承。只需要添加该组或编辑已对 adminSDHolder 容器定义的安全组的安全性。一个小时后,SDProp 线程会将对 adminSDHolder 容器的 ACL 所做的更改应用到受保护组的所有成员。这些成员不会继承他们所在容器的安全。

例如,Self 帐户需要“允许读取全部属性”权限。编辑 adminSDHolder 容器安全设置,以允许将此权限授予 Self 帐户。一个小时后,作为受保护组成员的所有用户的 Self 帐户将具有此权限。继承标志不会更改。

下面的示例演示了如何只对 adminSDHolder 对象应用这些更改。此示例将下面的权限授予 adminSDHolder 对象:
  • 列出内容
  • 读取全部属性
  • 写入全部属性
要将这些权限授予 adminSDHolder 对象,请按照下列步骤操作:
  1. 在“Active Directory 用户和计算机”中,单击“查看”菜单上的“高级功能”。
  2. 找到“adminSDHolder”对象。该对象位于 Active Directory 林中每个域的以下位置:“CN=adminSDHolder,CN=System,DC=domain,DC=com”,其中“DC=domain,DC=com”是域的可分辨名称。
  3. 右键单击“adminSDHolder”,然后单击“属性”。
  4. 在“属性”对话框中,单击“安全性”选项卡,然后单击“高级”。
  5. 在“adminSDHolder 的访问控制设置”对话框中,单击“权限”选项卡上的“添加”。
  6. 在“选择用户、计算机或组”对话框中,单击想要对其授予相关权限的帐户,然后单击“确定”。
  7. 在“adminSDHolder 的权限项”对话框中,单击“应用到”框中的“仅限此对象”,然后单击“列出内容”、“读取全部属性”和“写入全部属性”权限。
  8. 单击“确定”,以关闭“adminSDHolder 的权限项”对话框、“adminSDHolder 的访问控制设置”对话框和“adminSDHolder 属性”对话框。
一个小时内,将对与受保护组相关的用户对象更新 ACL 以反映这些更改。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
232199 Active Directory adminSDHolder 对象的说明和更新
318180 AdminSDHolder 线程影响通讯组中的可传递成员

状态

Microsoft 已经确认这是在“这篇文章中的信息适用于:”部分中列出的 Microsoft 产品中存在的问题。 此问题最早在 Windows Server 2003 Service Pack 1 中得到了解决。

更多信息

Active Directory 使用保护机制来确保为敏感组中的成员正确设置 ACL。在 PDC 操作主机上,该机制每隔一小时运行一次。该操作主机会将作为受保护组成员的用户帐户上的 ACL 与下面对象中的 ACL 进行比较:
CN=adminSDHolder,CN=System,DC=<MyDomain>,DC=<Com>

注意:“DC=<MyDomain>,DC=<Com>”表示域的可分辨名称 (DN)。

如果 ACL 不相同,则用户对象上的 ACL 会被覆盖,以反映 adminSDHolder 对象的安全设置(同时将禁用 ACL 继承)。如果帐户移至容器或组织单位,但在该容器或组织单位中已向恶意用户委派了修改用户帐户的管理凭据,那么此过程可确保这些帐户不会被未经授权的用户修改。请注意,在从管理组中删除用户时,该过程不可逆且必须手动进行更改。

注意:要控制 adminSDHolder 对象更新安全描述符的频率,请在以下注册表子项中创建或修改 AdminSDProtectFrequency 项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
如果 AdminSDProtectFrequency 注册表项不存在,则 adminSDHolder 对象会每隔 60 分钟(3600 秒)更新一次安全描述符。通过输入以秒为单位的值,可以使用此注册表项将该频率设置为介于 1 分钟(60 秒)和 2 小时(7200 秒)之间的任何频率。但是我们不建议您修改此值,除非执行短时间测试。修改此值可能会增加 LSASS 处理开销。

下表介绍了 Windows 2000 中受保护的组:
  • Enterprise Admins
  • Schema Admins
  • Domain Admins
  • Administrators

下表介绍了在应用 327825 修补程序或者安装 Windows 2000 Service Pack 4 之后,Windows Server 2003 和 Windows 2000 中受保护的组:
  • Administrators
  • Account Operators
  • Server Operators
  • Print Operators
  • Backup Operators
  • Domain Admins
  • Schema Admins
  • Enterprise Admins
  • Cert Publishers
此外,还会考虑保护下面的用户:
  • Administrator
  • Krbtgt
请注意,通讯组成员不填充用户标记。因此,无法使用“whoami”这样的工具成功确定组成员身份。

有关委派管理的更多信息,请下载 Best Practices for Delegating Active Directory Administration(委派 Active Directory 管理的最佳做法)白皮书。为此,请访问下面的 Microsoft 网站:
http://www.microsoft.com/downloads/details.aspx?familyid=631747a3-79e1-48fa-9730-dae7c0a1d6d3&displaylang=en

属性

文章编号: 817433 - 最后修改: 2007年12月3日 - 修订: 23.4
这篇文章中的信息适用于:
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003 Datacenter Edition
  • Microsoft Windows Server 2003 Enterprise Edition
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows Small Business Server 2003 Premium Edition
  • Microsoft Windows Small Business Server 2003 Standard Edition
  • Microsoft Windows 2000 Service Pack 3
  • Microsoft Windows 2000 Service Pack 4
关键字:?
kbqfe kbwinserv2003sp1fix atdownload kbhotfixserver KB817433
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com