使用 Ntdsutil.exe 在 Active Directory 中查看和设置 LDAP 策略

本文介绍如何使用 Ntdsutil.exe 工具管理轻型目录访问协议 (LDAP) 策略。

原始 KB 数: 315071

总结

若要确保域控制器能够支持服务级别保证,必须为许多 LDAP 操作指定操作限制。 这些限制可防止特定操作对服务器性能产生不利影响。 它们还使服务器对某些类型的攻击更具弹性。

LDAP 策略是使用类的对象实现的 queryPolicy 。 可以在查询策略容器中创建查询策略对象,该容器是配置命名上下文中目录服务容器的子级。 例如,cn=Query-Policies,cn=Directory Service,cn=Windows NT,cn=Services 配置命名上下文

LDAP 管理限制

LDAP 管理限制为:

  • InitRecvTimeout - 此值定义域控制器等待客户端在域控制器收到新连接后发送第一个请求的最大时间(以秒为单位)。 如果客户端在此时间内未发送第一个请求,服务器会断开客户端的连接。

    默认值:120 秒

  • MaxActiveQueries - 允许在域控制器上同时运行的最大并发 LDAP 搜索操作数。 达到此限制后,LDAP 服务器将返回忙碌错误。

    默认值:20

    注意

    此控件与 MaxPoolThreads 值交互不正确。 MaxPoolThreads 是每处理器控件,MaxActiveQueries 定义绝对数。 从 Windows Server 2003 开始,不再强制实施 MaxActiveQueries。 此外,MaxActiveQueries 不会显示在 Windows Server 2003 版本的 NTDSUTIL 中。

    默认值:20

  • MaxConnections - 域控制器将接受的最大同时 LDAP 连接数。 如果域控制器达到此限制后出现连接,则域控制器会删除另一个连接。

    默认值:5000

  • MaxConnIdleTime - 在 LDAP 服务器关闭连接之前,客户端可以空闲的最大时间(以秒为单位)。 如果连接空闲时间超过此时间,LDAP 服务器将返回 LDAP 断开连接通知。

    默认值:900 秒

  • MaxDatagramRecv - 域控制器将处理的数据报请求的最大大小。 忽略大于 MaxDatagramRecv 值的请求。

    默认值:4,096 字节

  • MaxNotificationPerConnection - 单个连接允许的最大未完成通知请求数。 达到此限制后,服务器会将繁忙错误返回到在该连接上执行的任何新通知搜索。

    默认值:5

  • MaxPageSize - 此值控制单个搜索结果中返回的最大对象数,与每个返回对象的大小无关。 若要执行结果可能超过此数量的对象的搜索,客户端必须指定分页搜索控件。 它将返回的结果分组到不超过 MaxPageSize 值的组中。 总之,MaxPageSize 控制单个搜索结果中返回的对象数。

    默认值:1,000

  • MaxPoolThreads - 域控制器专用于侦听网络输入或输出(I/O)的每个处理器的最大线程数。 此值还确定每个处理器可以同时处理 LDAP 请求的最大线程数。

    默认值:每个处理器 4 个线程

  • MaxResultSetSize - 在构成分页结果搜索的单个搜索之间,域控制器可能会存储客户端的中间数据。 域控制器存储此数据以加快分页结果搜索的下一部分。 MaxResultSize 值控制域控制器为此类搜索存储的数据总量。 达到此限制后,域控制器会丢弃这些中间结果中最旧的,以留出空间来存储新的中间结果。

    默认值:262,144 字节

  • MaxQueryDuration - 域控制器在单个搜索上花费的最大时间(以秒为单位)。 达到此限制后,域控制器将返回“timeLimitExceededed”错误。 需要更多时间的搜索必须指定分页结果控件。

    默认值:120 秒

  • MaxTempTableSize - 处理查询时, dblayer 可能会尝试创建一个临时数据库表,以便从中对中间结果进行排序和选择。 MaxTempTableSize 限制控制此临时数据库表的大小。 如果临时数据库表包含的对象数超过 MaxTempTableSize 的值,则会 dblayer 对完整的 DS 数据库和 DS 数据库中的所有对象执行效率低得多的分析。

    默认值:10,000 条记录

  • MaxValRange - 此值控制为对象的属性返回的值数,与对象具有的属性数或搜索结果中的对象数量无关。 在 Windows 2000 中,此控件硬编码为 1,000。 如果属性的值数超过 MaxValRange 值指定的值数,则必须使用 LDAP 中的值范围控件来检索超过 MaxValRange 值的值。 MaxValueRange 控制在单个对象上的单个属性上返回的值数。

    • 最小值:30
    • 默认值:1500

开始Ntdsutil.exe

Ntdsutil.exe位于 Windows 安装 CD-ROM 上的支持工具文件夹中。 默认情况下,Ntdsutil.exe安装在 System32 文件夹中。

  1. 单击“开始”,然后单击“运行”
  2. “打开 ”文本框中,键入 ntdsutil,然后按 Enter。 若要随时查看帮助,请在命令提示符处键入 ?

查看当前策略设置

  1. 在Ntdsutil.exe命令提示符处,键入 LDAP policies,然后按 Enter。
  2. 在 LDAP 策略命令提示符处,键入 connections,然后按 Enter。
  3. 在服务器连接命令提示符处,键入 connect to server <DNS name of server>,然后按 Enter。 你想要连接到当前正在使用的服务器。
  4. 在服务器连接命令提示符处,键入 q并按 Enter 返回到上一个菜单。
  5. 在 LDAP 策略命令提示符处,键入 Show Values,然后按 Enter。

显示存在的策略。

修改策略设置

  1. 在Ntdsutil.exe命令提示符处,键入 LDAP policies,然后按 Enter。

  2. 在 LDAP 策略命令提示符处,键入 Set <setting> to <variable>,然后按 Enter。 例如,将 MaxPoolThreads 类型 设置为 8

    如果将另一个处理器添加到服务器,此设置将发生更改。

  3. 可以使用 Show Values 命令来验证更改。

    若要保存更改,请使用 提交更改

  4. 完成后,键入 q并按 Enter。

  5. 若要退出Ntdsutil.exe,请在命令提示符下键入 q,然后按 Enter。

注意

此过程仅显示默认域策略设置。 如果应用自己的策略设置,则看不到它。

重新启动要求

如果更改域控制器当前正在使用的查询策略的值,这些更改将在不重新启动的情况下生效。 但是,如果创建新的查询策略,则新查询策略需要重新启动才能生效。

更改查询值的注意事项

为了保持域服务器复原能力,建议不要增加超时值 120 秒。 形成更高效的查询是首选解决方案。 有关创建高效查询的详细信息,请参阅 创建更高效Microsoft已启用 Active Directory 的应用程序

但是,如果更改查询不是选项,请仅在一个域控制器或一个站点上增加超时值。 有关说明,请参阅下一节。 如果设置应用于一个域控制器,请减少域控制器上的 DNS LDAP 优先级,以便客户端不太可能使用服务器进行身份验证。 在优先级提高的域控制器上,使用以下注册表设置进行设置 LdapSrvPriority

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters

“编辑 ”菜单上,选择“ 添加值”,然后添加以下注册表值:

  • 条目名称:LdapSrvPriority
  • 数据类型:REG_DWORD
  • 值:将值设置为所需优先级的值。

有关详细信息,请参阅 如何优化驻留在客户端站点外部的域控制器或全局目录的位置。

有关配置每个域控制器或每个站点策略的说明

  1. 在 CN=Query-Policies、CN=Directory Service、CN=Windows NT、CN=Services、CN=Configuration、 林根下创建新的查询策略。

  2. 通过在 Query-Policy-Object 属性中输入新策略的可分辨名称,将域控制器或站点设置为指向新策略。 属性的位置如下所示:

    • 域控制器的位置为 CN=NTDS 设置,CN= DomainControllerName,CN=Servers,CN= 站点名称,CN=Sites,CN=Configuration,林根

    • 站点的位置为 CN=NTDS 站点设置,CN= 站点名称,CN=Sites,CN=Configuration, 林根

示例脚本

可以使用以下文本创建 Ldifde 文件。 可以导入此文件以创建超时值为 10 分钟的策略。 将此文本复制到 Ldappolicy.ldf,然后运行以下命令,其中 林根是林根 的可分辨名称。 保留 DC=X 原样。 它是一个常量,该常量将在脚本运行时替换为林根名称。 常量 X 不指示域控制器名称。

ldifde -i -f ldappolicy.ldf -v -c DC=X DC= forest root

启动 Ldifde 脚本

dn: CN=Extended Timeout,CN=Query-Policies,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=X  
changetype: add  
instanceType: 4  
lDAPAdminLimits: MaxReceiveBuffer=10485760  
lDAPAdminLimits: MaxDatagramRecv=1024  
lDAPAdminLimits: MaxPoolThreads=4  
lDAPAdminLimits: MaxResultSetSize=262144  
lDAPAdminLimits: MaxTempTableSize=10000  
lDAPAdminLimits: MaxQueryDuration=300  
lDAPAdminLimits: MaxPageSize=1000  
lDAPAdminLimits: MaxNotificationPerConn=5  
lDAPAdminLimits: MaxActiveQueries=20  
lDAPAdminLimits: MaxConnIdleTime=900  
lDAPAdminLimits: InitRecvTimeout=120  
lDAPAdminLimits: MaxConnections=5000  
objectClass: queryPolicy  
showInAdvancedViewOnly: TRUE

导入文件后,可以使用 Adsiedit.msc 或 Ldp.exe更改查询值。 此脚本中的 MaxQueryDuration 设置为 5 分钟。

若要将策略链接到 DC,请使用 LDIF 导入文件,如下所示:

dn: CN=NTDS  
Settings,CN=DC1,CN=Servers,CN=site1,CN=Sites,CN=Configuration, DC=X  
changetype: modify  
add: queryPolicyobject  
queryPolicyobject: CN=Extended Timeout,CN=Query-Policies,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=X

使用以下命令导入它:

ldifde -i -f link-policy-dc.ldf -v -c DC=X DC= **forest root**

对于站点,LDIF 导入文件将包含:

dn: CN=NTDS Site Settings,CN=site1,CN=Sites,CN=Configuration, DC=X  
changetype: modify  
add: queryPolicyobject  
queryPolicyobject: CN=Extended Timeout,CN=Query-Policies,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=X

注意

Ntdsutil.exe仅显示默认查询策略中的值。 如果定义了任何自定义策略,则Ntdsutil.exe不显示它们。