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

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

适用于:Windows Server 2019、Windows Server 2016、Windows Server 2012 R2
原始 KB 编号: 315071

摘要

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

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

LDAP 管理限制

LDAP 管理限制包括:

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

    默认值:120 秒

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

    默认值:20

    注意

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

    默认值: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-Enabled 应用程序

但是,如果不是更改查询的选项,请仅在一个域控制器或一个站点上增加超时值。 有关说明,请参阅下一部分。 如果设置应用于一个域控制器,请降低域控制器上的 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=站点、CN=配置、 林根

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

示例脚本

可以使用以下文本创建 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 不会显示这些策略。