如何将标记为在 Windows Server 2003 Service Pack 1 保密属性

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

本文内容

概要

中 Active Directory 目录服务对于 Microsoft Windows Server 2000 和 Microsoft Windows Server 2003,很难阻止的已验证身份的用户读取属性。通常,如果用户请求的属性或其属性的一组 READ_PROPERTY 权限,被授予读访问权限。在 Active Directory 中的默认安全设置,以便通过身份验证的用户有权读取所有属性。本文讨论了如何防止 Windows Server 2003 Service Pack 1 (SP1) 中的属性的读取权限。

简介

本文介绍如何将标记为在 Windows Server 2003 Service Pack 1 保密属性。

更多信息

Windows Server 2003 SP1 引入了一种方法标记为保密属性。要这样做您修改 searchFlags 属性架构中的值。searchFlags 属性值包含多个位表示的属性的各种属性。例如对于如果位 1 设置,被索引属性。位 7 (128) 将该属性指定为保密。

要求和约束

只有正在运行 Windows Server 2003 SP1 或更高版本的域控制器强制实施用于机密属性的读访问权限检查。机密属性功能捆缚在安装 Windows Server 2003 SP1 或更高版本。此功能不依赖于是否启用了某个域或林功能级别。

除非满足下列条件都为真,否则,请不要使用机密属性功能:
  • 所有基于 Windows Server 2003 的域控制器都具有 Windows Server 2003 SP1 或更高版本安装。
  • 所有基于 Windows 2000 的域控制器被升级或删除。
如果域中包括的域控制器都运行 Windows 2000 Server,原始发行版的 Windows Server 2003 和 Windows Server 2003 SP1,可能会出现以下情形:
  • 如果一个未经授权的客户端查询的基于 Windows 2000 Server 的和基于 Windows Server 2003 的域控制器为保密属性的数据,客户端可以读取数据。
  • 如果一个未经授权的客户端查询的基于 Windows Server 2003 SP1 的域控制器为保密属性的数据,客户端无法读取数据。
您不能标记为保密一个基础架构属性。雇员 ID 是基础架构属性的示例。此属性不能标记为机密,因为其 systemsFlags 属性值设置为 0x10 (基架构)。更多的信息,请参阅"如何确定某个属性是否是基础架构属性"节和"如何确定 searchFlags 属性值,当您使用现有属性"节。

测试

当您将测试对 Active Directory 所做的任何更改和任何架构扩展,我们建议您全面镜像生产林中的实验室中测试属性的更改。测试有助于保证此过程顺利地工作并检测到问题。

访问控制检查

安装了 Windows Server 2003 SP1 后以及之后执行的读取访问权限检查,Active Directory,Active Directory 将检查的机密的属性。如果保密属性存在,并为这些属性设置 READ_PROPERTY 权限,如果 Active Directory 也需要 CONTROL_ACCESS 属性或其属性集的权限。

注意完全控制权限设置包括 CONTROL_ACCESS 权限。

active Directory 在下列情况下执行一个对象上的读取访问权限检查:
  • 当您评估是否将对象与搜索筛选器相匹配。
  • 当您返回与搜索筛选器匹配的对象的属性时。
默认状态下,只有管理员具有所有对象的 CONTROL_ACCESS 权限。因此,只有管理员可以读取机密的属性。 管理员可能会委派这些权限,任何用户或任何组。

泛型和特定于对象的访问控制项

在 Active Directory 中的每个对象都有与之相关联的访问控制信息。此信息称为安全描述符。 安全描述符控制可用用户和组的访问的类型。当在对象创建时自动创建安全描述符。

安全描述符中的权限项的一组称为自由访问控制列表 (DACL)。DACL 中的每个权限条目称为访问控制项 (ACE)。

您可以授予对该对象的权限,或通过在对象上使用一般的或特定于对象的访问控制项授予 CONTROL_ACCESS 保密属性权限。 通过在对象上显式标记它们,或使用继承,您可以授予的权限。继承意味着您在容器层次结构中处于较高位置的容器上设置的可继承的访问控制项。

泛型和特定于对象的访问控制项基本上都相同。什么与众不同它们是控件的访问控制项提供通过继承和对对象的访问。泛型的访问控制项应用于整个对象。特定于对象的访问控制项提供了更好地控制对象如何继承访问控制项。您在使用特定于对象的访问控制项时,您可以指定该属性或对象将继承访问控制项的属性集。

您在使用机密属性功能时 CONTROL_ACCESS 权限授予给用户分配一个通用的访问控制项。如果通过将特定于对象的访问控制项分配都授予 CONTROL_ACCESS 权限,用户将只能 CONTROL_ACCESS 机密属性的权限。

当您使用一般的访问控制项时,被授予以下权限:
  • 所有扩展的权利
  • 允许身份验证
  • 更改密码
  • 为接收
  • 重置密码
  • 为发送
当您使用一般的访问控制项时授予的权限可能会提供访问超过需要整个的对象上。这是否需要考虑您可以在对象上设置的特定于对象的访问控制项,以便访问控制项仅适用于在机密属性。您在使用特定于对象的访问控制项时,您可以控制属性或设置为访问控制项应用的属性。

在 Windows Server 2003 中的用户界面不公开 Control_Access 权限。使用 Dsacls.exe 工具,可以通过指派进行一般访问控制项设置 Control_Access 权限。 但是,您不能使用此工具将分配的对象特定的访问控制项。可以通过指定特定于对象的访问控制项设置 Control_Access 权限的唯一工具是 Ldp.exe 工具。

注意访问控制的深入讨论是超出了本文的范围。有关访问控制的详细信息,请访问以下 Microsoft 网站:
http://msdn.microsoft.com/en-us/library/aa374860(VS.85).aspx
http://technet.microsoft.com/en-us/library/cc749433.aspx

如何使用继承

在一个大的域不实际手动分配控制访问权限,给用户或为每个对象具有机密属性的组。解决方案是使用继承设置是到容器的层次结构中处于较高位置的可继承的访问控制项。此访问控制项应用于该容器的所有子对象。

默认状态下,所有组织单位 (OU),并为内置管理员帐户除外的所有用户帐户启用继承。如果您创建具有继承被禁用的用户帐户,或者通过复制内置管理员帐户,创建的管理帐户,必须启用对这些帐户的继承。否则,继承模型不应用于这些帐户。

如何创建机密属性

  1. 确定要将标记为机密,何种属性或添加您希望保密的属性。
  2. 向相应的用户授予 Control_Access 权限,以便用户可以查看属性数据。
工具 (如 Ldp.exe 工具和 Adsiedit.msc 工具可用于创建保密属性。.ldf 文件通常用于扩展架构。这些文件还可用于将标记为保密属性。 您所创建的用于实现该文件应进行优化在测试阶段,这样您就知道确切什么要添加到架构时您掷到生产环境。.ldf 文件有助于防止出现错误。

下面的示例.ldf 文件可用于执行以下操作:
  • 将属性添加到架构
  • 标记为保密属性
  • 将属性添加到用户类别
注意在使用.ldf 文件之前,请确保您阅读有关如何将对象和属性添加到架构的重要信息的对象标识符和属性语法部分。

示例.ldf 文件

下面的代码将属性添加到架构,然后将标记为保密属性。
dn: CN=ConfidentialAttribute-LDF,CN=Schema,Cn=Configuration,DC=domain,DC=com
changetype: add
objectClass: attributeSchema
lDAPDisplayName: ConfidentialAttribute
adminDescription: This attribute stores user's confidential data
attributeID: 1.2.840.113556.1.xxxx.xxxx.1.x
attributeSyntax: 2.5.5.12
oMSyntax: 64
isSingleValued: TRUE
showInAdvancedViewOnly: TRUE
searchFlags: 128

dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-
下面的代码将新属性添加到用户 class.
dn: CN=User,CN=Schema,CN=Configuration,DC=domain,DC=com
changetype: modify
add: mayContain
mayContain: ConfidentialAttribute

dn:
changeType: modify
add: schemaupdatenow
schemaupdatenow: 1
-

如何让非管理用户属性数据,请参阅

注意下面的过程要求您使用与 Windows Server 2003 R2 活动目录应用程序模式 (ADAM) 中包含 Ldp.exe 工具。其他版本的 Ldp.exe 工具不能设置的权限。

如何手动设置用户帐户上的 Control_Access 权限

  1. 打开包含 Windows Server 2003 R2 ADAM 的 Ldp.exe 工具。
  2. 连接和绑定到目录。
  3. 选择一个用户帐户、 用鼠标右键单击帐户、 单击 高级,单击 安全描述符,然后单击 确定
  4. DACL 框中单击 添加 ACE
  5. 受信者 框中键入您要授予的权限的用户名或组名称。
  6. 访问控制 框中验证您在步骤 5 中所做的更改。

如何使用继承来分配 Control_Access 权限

若要用于继承创建 Control_Access 权限授予所需的用户或组高于在容器层次结构中具有机密属性的对象的访问控制项。在域级别或容器层次结构的适用于企业中的任何一点,您可以设置此访问控制项。具有机密属性的子对象必须启用继承。

若要将 Control_Access 权限,请按照下列步骤操作:
  1. 打开包含在 Windows Server 2003 R2 ADAM Ldp.exe 文件。
  2. 连接和绑定到一个目录。
  3. 选择一个 OU 或容器的容器层次结构中更高版本比该 OU 或容器,右键单击具有机密的属性的对象单击 高级、 单击 安全描述符,和然后单击 确定
  4. DACL 框中单击 添加 ACE
  5. 受信者 框中键入您要授予的权限的用户名或组名称。
  6. 访问控制 框中验证您在步骤 5 中所做的更改。
  7. 对象类型 框中单击机密属性中添加的。
  8. 请确保在目标对象上启用了继承。

如何确定 systemFlags 属性值,当您使用现有属性

如果您使用已有对象,您必须验证当前 searchFlags 属性值是什么。如果添加了一个对象添加对象时,可以定义值。有许多方法来获取 searchFlags 属性值。使用最适合您的方法。

若要使用 Ldp.exe 工具来获取 searchFlags 属性值,请按照下列步骤操作:
  1. 单击 开始,单击 运行,键入 LDP,然后单击 确定
  2. 单击 连接,然后单击 绑定
  3. 绑定以根域的管理员或属于企业管理员帐户作为绑定。
  4. 单击 视图,然后单击
  5. 单击 CN = 架构,cn = 配置,dc = rootdomain,然后单击 确定
  6. 在左窗格中展开 CN = 架构,cn = 配置,dc = rootdomain
  7. 定位要标记为保密,属性的域名,然后展开它。
  8. 在对象的填充的属性的列表,查找 searchFlags 以确定当前 searchFlags 属性值为该对象。
注意若要确定新 searchFlags 属性值,使用以下公式:
128 + current searchFlags attribute value = new searchFlags attribute value

如何确定某个属性是否是基础架构属性

若要确定是否有一个属性是基础架构的属性,则使用 Ldp.exe 工具检查 systemFlags 属性值。

LDP 输出的雇员 ID – systemFlags: 0x10 = (FLAG_SCHEMA_BASE_OBJECT)

在下面的示例 Ldp.exe 输出 Ldp.exe 标识 systemFlags 属性值为 0x10 和基础架构属性。 因此,您不能标记为保密此属性。
>> Dn: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com
	2> objectClass: top; attributeSchema; 
	1> cn: Employee-ID; 
	1> distinguishedName: CN=Employee-ID,CN=Schema,CN=Configuration,DC=domain,DC=com; 
	1> instanceType: 0x4 = ( IT_WRITE ); 
	1> whenCreated: 08/05/2005 14:58:58 Central Standard Time; 
	1> whenChanged: 08/05/2005 14:58:58 Central Standard Time; 
	1> uSNCreated: 220; 
	1> attributeID: 1.2.840.113556.1.4.35; 
	1> attributeSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE ); 
	1> isSingleValued: TRUE; 
	1> rangeLower: 0; 
	1> rangeUpper: 16; 
	1> uSNChanged: 220; 
	1> showInAdvancedViewOnly: TRUE; 
	1> adminDisplayName: Employee-ID; 
	1> adminDescription: Employee-ID; 
	1> oMSyntax: 64 = ( OM_S_UNICODE_STRING ); 
	1> searchFlags: 0x0 = (  ); 
	1> lDAPDisplayName: employeeID; 
	1> name: Employee-ID; 
	1> objectGUID: 64fb3ed1-338f-466e-a879-595bd3940ab7; 
	1> schemaIDGUID: bf967962-0de6-11d0-a285-00aa003049e2; 
	1> systemOnly: FALSE; 
	1> systemFlags: 0x10 = ( FLAG_SCHEMA_BASE_OBJECT ); 
	1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=domain,DC=com;

LDP 输出的雇员号 systemFlags: 0x0 =)

在下面的示例 Ldp.exe 输出 Ldp.exe 标识 systemFlags 属性值为 0。 This attribute can be marked as confidential.
>> Dn: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com
	2> objectClass: top; attributeSchema; 
	1> cn: Employee-Number; 
	1> distinguishedName: CN=Employee-Number,CN=Schema,CN=Configuration,DC=warrenw,DC=com; 
	1> instanceType: 0x4 = ( IT_WRITE ); 
	1> whenCreated: 08/05/2005 14:58:58 Central Standard Time; 
	1> whenChanged: 08/05/2005 14:58:58 Central Standard Time; 
	1> uSNCreated: 221; 
	1> attributeID: 1.2.840.113556.1.2.610; 
	1> attributeSyntax: 2.5.5.12 = ( SYNTAX_UNICODE_TYPE ); 
	1> isSingleValued: TRUE; 
	1> rangeLower: 1; 
	1> rangeUpper: 512; 
	1> mAPIID: 35943; 
	1> uSNChanged: 221; 
	1> showInAdvancedViewOnly: TRUE; 
	1> adminDisplayName: Employee-Number; 
	1> adminDescription: Employee-Number; 
	1> oMSyntax: 64 = ( OM_S_UNICODE_STRING ); 
	1> searchFlags: 0x0 = (  ); 
	1> lDAPDisplayName: employeeNumber; 
	1> name: Employee-Number; 
	1> objectGUID: 2446d04d-b8b6-46c7-abbf-4d8e7e1bb6ec; 
	1> schemaIDGUID: a8df73ef-c5ea-11d1-bbcb-0080c76670c0; 
	1> systemOnly: FALSE; 
	1> systemFlags: 0x0 = (  ); 
	1> objectCategory: CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=warrenw,DC=com; 
-----------

对象标识符

向架构中添加一个属性或类对象时所需的属性之一就是对象标识符 (也称为 OID)。对象标识符用于唯一地定义对象类和属性。请确保您的公司获取一个唯一对象标识符来标识其属性。不支持生成如 Oidgen.exe 工具的对象标识符的工具。要从 Microsoft 获取对象标识符,请访问下面的 Microsoft 网站:
http://msdn2.microsoft.com/en-us/library/ms677620.aspx

属性语法

若要将新对象添加到架构还需要 attributeSyntax 属性。此属性定义存储表示形式,字节排序和进行比较的属性类型的匹配规则。语法定义了属性值必须为字符串、 一个数字或时间单位。每个对象的每个属性都与一个语法。请确保您选择正确的属性语法,为新的属性。这一点尤其重要,如果您与另一个 LDAP 同步轻型目录访问协议 (LDAP) 目录目录。该属性添加到架构后,不能更改其属性语法。

有关 attributeSyntax 属性的详细信息,请访问下面的 Microsoft 网站:
hhttp://msdn.microsoft.com/en-us/library/ms675236(VS.85).aspx
有关在 searchFlags 属性的值的详细信息,请访问下面的 Microsoft Web 站点,然后搜索"效果的索引在搜索行为":
http://technet2.microsoft.com/WindowsServer/en/library/8196d68e-776a-4bbc-99a6-d8c19f36ded41033.mspx?mfr=true

属性

文章编号: 922836 - 最后修改: 2007年10月11日 - 修订: 3.4
这篇文章中的信息适用于:
  • Microsoft Windows Server 2003 Service Pack 1?当用于
    • Microsoft Windows Server 2003 Standard Edition
    • Microsoft Windows Server 2003 Enterprise Edition
    • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Standard x64 Edition
关键字:?
kbmt kbhowto kbinfo KB922836 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 922836
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