Wren:DS 5.1.1 配置参数详解

详解 Wren:DS 5.1.1 配置面:config.ldif 与在线 cn=config 修改通道实测对比、179 个配置条目总览、全局/后端/连接处理器/密码策略/TLS/日志/复制/缓存/JVM 堆参数逐项讲解,附实测行为与生产配置模板。

Wren:DS目录服务LDAP身份认证Java2026/11/02

Wren:DS 5.1.1 配置参数详解

目标:把 Wren:DS 5.1.1 的全部配置面——主配置文件 config.ldif、全局参数、后端与索引、连接处理器、密码策略、TLS、日志、复制、缓存与工作队列、REST 端点、插件、JVM 堆参数——逐项讲清默认值、修改方法与生效方式,关键参数附本机实测行为。全文参数值与命令回显均为 2026-11-02 在测试服务器 wrends01(已按 《Ubuntu 22.04 安装 Wren:DS 5.1.1 指南》 完成安装)上的实测记录。

一、环境信息

项目值取证方式
主机名wrends01hostname
Wren:DS5.1.1(Build 2026-05-22T13:11:32Z)start-ds --version
JDKOpenJDK 17.0.20.1java -version
安装目录/opt/wren-ds下文基准路径
主配置文件/opt/wren-ds/config/config.ldif实测共 179 个配置条目
LDAP 端口1389config.ldif 中 ds-cfg-listen-port
LDAPS 端口1636同上
管理连接器端口4444同上
业务后缀dc=example,dc=comds-cfg-base-dn
JVM 堆-Xms256m -Xmx256mps -ef 实测

统计配置条目总数:

root@wrends01:~# grep -c '^dn:' /opt/wren-ds/config/config.ldif
179

二、前置条件

  • Wren:DS 5.1.1 已完成安装并处于运行状态(安装过程见 《Ubuntu 22.04 安装 Wren:DS 5.1.1 指南》)。
  • 具备 root 或目录管理员身份:本文所有 LDAP 操作以 cn=Directory Manager / q1w2e3r4 绑定。
  • 服务器已安装 ldap-utils(ldapsearch/ldapmodify 可用)。
  • 修改配置前先备份:cp /opt/wren-ds/config/config.ldif /opt/wren-ds/config/config.ldif.bak。

三、参数查看与修改方式

Wren:DS 的配置全部存放在 cn=config 这棵 LDAP 树里,config/config.ldif 就是它的磁盘形态。查看与修改共有四条通道,能力差异很大,先实测清楚。

3.1 直接读 config.ldif(查看首选)

任何参数的当前值都可以直接 grep 主配置文件:

root@wrends01:~# grep -n 'ds-cfg-lookthrough-limit' /opt/wren-ds/config/config.ldif
40:ds-cfg-lookthrough-limit: 5000
1513:ds-rlim-lookthrough-limit: 0

第 40 行是全局配置 cn=config 的值,第 1513 行是某个条目上的资源限制覆盖(0 表示不限制)。读文件永远安全,但改文件要分在线/停机两种情况,见 3.2 与 3.4。

3.2 在线修改:走 LDAP 端口操作 cn=config(推荐通道,实测有效)

cn=config 树可以通过普通 LDAP 端口(1389)直接读写,改动立即生效并即时回写磁盘,不需要重启。这是本篇实测下来唯一可靠的在线配置通道。

先看当前值:

root@wrends01:~# cd /opt/wren-ds
root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 \
  -b 'cn=config' -s base '(objectClass=ds-cfg-root-config)' ds-cfg-size-limit ds-cfg-lookthrough-limit
dn: cn=config
ds-cfg-size-limit: 1000
ds-cfg-lookthrough-limit: 5000

在线改 lookthrough-limit 从 5000 到 4000:

root@wrends01:/opt/wren-ds# printf 'dn: cn=config\nchangetype: modify\nreplace: ds-cfg-lookthrough-limit\nds-cfg-lookthrough-limit: 4000\n' > /tmp/cfg1.ldif
root@wrends01:/opt/wren-ds# ./bin/ldapmodify -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 -f /tmp/cfg1.ldif
Processing MODIFY request for cn=config
MODIFY operation successful for DN cn=config

立即验证内存态与磁盘态:

root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 \
  -b 'cn=config' -s base '(objectClass=*)' ds-cfg-lookthrough-limit | grep lookthrough
ds-cfg-lookthrough-limit: 4000
root@wrends01:/opt/wren-ds# grep -n 'lookthrough' config/config.ldif
40:ds-cfg-lookthrough-limit: 4000
1513:ds-rlim-lookthrough-limit: 0

磁盘文件同步更新,无需重启。实测完成后已改回 5000:

41:ds-cfg-lookthrough-limit: 5000
1513:ds-rlim-lookthrough-limit: 0

结论:ldapmodify 操作 cn=config 是 5.1.1 上最可靠的在线配置通道。改错可随时改回,但语法错误会被 schema 校验直接拒绝(服务端 ds-cfg-check-schema: true)。

3.3 dsconfig 走管理连接器(实测存在 TLS 缺陷)

dsconfig 是官方配置工具,必须经管理连接器(4444)。实测首次连接会弹证书信任菜单:

root@wrends01:/opt/wren-ds# ./bin/dsconfig list-backends -h 127.0.0.1 -p 4444 \
  -D 'cn=Directory Manager' -w q1w2e3r4
Server Certificate:

User DN  : O=Administration Connector RSA Self-Signed Certificate, CN=wrends01
Validity : From 'Mon Nov 02 12:40:30 GMT 2026'
             To 'Sun Oct 28 12:40:30 GMT 2046'
Issuer   : O=Administration Connector RSA Self-Signed Certificate, CN=wrends01



Do you trust this server certificate?

  1) No
  2) Yes, for this session only
  3) Yes, also add it to a truststore
  4) View certificate details

Enter choice: [2]:

选 2 之后,TLS 握手能过(openssl s_client 对 4444 用 TLS 1.2 握手成功),但 LDAP 会话随即被掐断:

The Backends could not be listed due to a communications problem: Server
Connection Closed

status 同样失败:

root@wrends01:/opt/wren-ds# ./bin/status -D 'cn=Directory Manager' -w q1w2e3r4
Unable to connect to the server at "wrends01" on port 4444

这是 5.1.1 在 OpenJDK 17.0.20 上的 TLS 传输层缺陷(服务端 logs/errors 伴随 GRIZZLY0013 异常,实测累计 29 条),影响 LDAPS、StartTLS 与管理连接器全部 TLS 路径,不是证书配置错误。因此在线配置以 3.2 的 cn=config LDAP 通道为准,dsconfig 留作上游修复后的备用工具,其语法见 《Wren:DS 5.1.1 常用 CLI 命令与工具详解》。

3.4 停机修改 config.ldif(兜底通道)

服务无法启动或需要批量改配置时:stop-ds → 编辑 config/config.ldif → start-ds。注意两点:

  • 服务运行中直接编辑文件不会被热加载,且进程退出时可能用内存态覆盖你的修改;
  • 改错导致起不来时,用备份文件回滚。

3.5 修改方式选择

场景通道是否需重启实测状态
查看任意参数读 config.ldif / ldapsearch cn=config否可用
在线改参数ldapmodify cn=config(1389 端口)否可用,即时生效并落盘
在线改参数dsconfig(4444)否TLS 缺陷不可用
批量/纠错停机编辑 config.ldif是可用
JVM 堆参数config/java.properties是可用

四、参数体系总览

179 个配置条目按功能族归类如下(族名与 cn=config 下的子容器一一对应):

配置族容器 DN条目数(实测)决定什么
全局行为cn=config1大小/时间/扫描限制、schema 校验、匿名策略、默认口令策略
后端cn=Backends,cn=config7数据存储:userRoot/adminRoot/schema/tasks/monitor/backup/ads-truststore
索引cn=Index,ds-cfg-backend-id=userRoot,...13每个属性一种索引类型与匹配规则
连接处理器cn=Connection Handlers,cn=config5LDAP/LDAPS/HTTP/JMX/LDIF 监听端口与 TLS
管理连接器cn=Administration Connector,cn=config14444 管理端口与 admin-cert
密码策略cn=Password Policies,cn=config2Default/Root 两套策略
口令校验器cn=Password Validators,cn=config7长度/字符集/字典/重复字符等规则
口令存储方案cn=Password Storage Schemes,cn=config17SSHA/SSHA512/PBKDF2/Bcrypt 等
日志cn=Loggers,cn=config + 轮转/保留策略8+7access/errors/audit/debug/http 各日志器
复制cn=Synchronization Providers,cn=config2多主同步提供者与域
条目缓存cn=Entry Caches,cn=config2FIFO / Soft Reference
工作队列cn=Work Queue,cn=config1请求排队容量
HTTP 端点cn=HTTP Endpoints,cn=config2REST /api 与管理 /admin
插件cn=Plugins,cn=config10LastMod/Entry UUID/引用完整性等
Root DNcn=Root DNs,cn=config1Directory Manager 身份与资源限制
密钥/信任库cn=Key Manager Providers / cn=Trust Manager Providers4+4keystore/truststore 与 pin 文件
虚拟属性/分组/监控其余容器其余isMemberOf、动态组、监控提供者等

五、核心参数分类详解

5.1 全局服务器参数(cn=config)

实测本机全部值(节选,完整 179 条以 ldapsearch -b 'cn=config' -s base 为准):

root@wrends01:/opt/wren-ds# awk 'BEGIN{p=0} /^dn: /{p=($0=="dn: cn=config")} p' config/config.ldif
dn: cn=config
objectClass: top
objectClass: ds-cfg-root-config
cn: config
ds-cfg-check-schema: true
ds-cfg-add-missing-rdn-attributes: true
ds-cfg-allow-attribute-name-exceptions: false
ds-cfg-invalid-attribute-syntax-behavior: reject
ds-cfg-single-structural-objectclass-behavior: reject
ds-cfg-notify-abandoned-operations: false
ds-cfg-proxied-authorization-identity-mapper: cn=Exact Match,cn=Identity Mappers,cn=config
ds-cfg-size-limit: 1000
ds-cfg-time-limit: 60 seconds
ds-cfg-lookthrough-limit: 5000
ds-cfg-writability-mode: enabled
ds-cfg-bind-with-dn-requires-password: true
ds-cfg-reject-unauthenticated-requests: false
ds-cfg-default-password-policy: cn=Default Password Policy,cn=Password Policies,cn=config
ds-cfg-return-bind-error-messages: false
ds-cfg-idle-time-limit: 0 seconds
ds-cfg-save-config-on-successful-startup: true
ds-cfg-etime-resolution: milliseconds
ds-cfg-max-allowed-client-connections: 0
ds-cfg-max-psearches: -1

重点参数逐项:

参数实测默认含义与调整建议
ds-cfg-size-limit1000单次搜索默认返回条目上限,客户端可用 SLAP 请求控件在权限内突破;Root DN 上为 0(不限制)
ds-cfg-time-limit60 seconds单次搜索最长执行时间
ds-cfg-lookthrough-limit5000单次搜索最多扫描条目数,防大过滤拖垮服务器;3.2 节已实测可在线改
ds-cfg-check-schematrue写入/修改做 schema 校验;批量导入脏数据时才临时关闭
ds-cfg-writability-modeenabled全局写开关,lockdown 模式用于只读发布窗口
ds-cfg-bind-with-dn-requires-passwordtrue带 DN 的 bind 必须给口令,实测拒绝空口令(见下)
ds-cfg-reject-unauthenticated-requestsfalse是否禁止匿名请求,实测匿名搜索可用(见下)
ds-cfg-max-allowed-client-connections00=不限制;生产建议按内存设上限保护 JVM
ds-cfg-return-bind-error-messagesfalsefalse 时 bind 失败只回 invalid-credentials,不泄露原因

空口令 bind 实测(验证 bind-with-dn-requires-password: true):

root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -D 'cn=Directory Manager' -w '' \
  -b 'dc=example,dc=com' -s base '(objectClass=*)' dn
Additional Information:  Unable to process the simple bind request because it
contained a bind DN but no password, which is forbidden by the server
configuration

access 日志同步记录 result=53:

[02/Nov/2026:14:15:57 +0000] BIND REQ conn=18 op=0 msgID=1 version=3 type=SIMPLE dn="cn=Directory Manager"
[02/Nov/2026:14:15:57 +0000] BIND RES conn=18 op=0 msgID=1 result=53 message="Unable to process the simple bind request because it contained a bind DN but no password, which is forbidden by the server configuration" etime=1

匿名请求实测(验证 reject-unauthenticated-requests: false):

root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -b 'dc=example,dc=com' -s base '(objectClass=*)' dn
dn: dc=example,dc=com

不带任何凭据即可读回后缀根条目。生产环境若不需要匿名查根条目,应把该参数改为 true(在线改法同 3.2)。

ds-cfg-allowed-task 列出了允许经 cn=tasks 提交的后端任务(实测 15 种:AddSchemaFileTask、BackupTask、DisconnectClientTask、EnterLockdownModeTask、ExportTask、ImportTask、InitializeTargetTask、InitializeTask、SetGenerationIdTask、LeaveLockdownModeTask、RebuildTask、RestoreTask、ShutdownTask、PurgeConflictsHistoricalTask、ResetChangeNumberTask),这是 《Wren:DS 5.1.1 常用 CLI 命令与工具详解》 中 backup/restore/rebuild-index 在线模式的权限基础。

5.2 后端与索引(cn=Backends)

用户数据后端 userRoot 实测配置:

dn: ds-cfg-backend-id=userRoot,cn=Backends,cn=config
objectClass: top
objectClass: ds-cfg-backend
objectClass: ds-cfg-local-backend
objectClass: ds-cfg-pluggable-backend
objectClass: ds-cfg-je-backend
ds-cfg-java-class: org.opends.server.backends.jeb.JEBackend
ds-cfg-backend-id: userRoot
ds-cfg-enabled: true
ds-cfg-db-directory: db
ds-cfg-writability-mode: enabled
ds-cfg-base-dn: dc=example,dc=com

💡 技术拓展:Wren:DS 的后端类型不止 JE 一种。常见后端对比——

后端存储特点适用
JE(Pluggable/Local)Berkeley DB JE带索引、支持复制与在线任务生产主力,本文所用
LDIF Backend纯文本 LDIF无索引、改文件即生效只读小数据集(如 schema)
Memory Backend纯内存重启即失monitor/tasks 等内部树
JDBC/Remote Backend外部数据库/远端 LDAP数据不落地虚拟化已有数据源

本文环境用户数据落在默认 JE 后端 userRoot,目录 /opt/wren-ds/db。

除 userRoot 外实测还有 6 个后端:adminRoot(管理树)、ads-truststore(复制信任库)、backup(备份任务树)、monitor(监控计数器)、schema(schema 定义)、tasks(任务队列)。

userRoot 默认建了 13 个属性索引(实测清单):aci、cn、ds-sync-conflict、ds-sync-hist、entryUUID、givenName、mail、member、objectClass、sn、telephoneNumber、uid、uniqueMember。索引类型与匹配规则可在对应条目(dn: ds-cfg-attribute=uid,cn=Index,...)查看,新增索引条目后需 rebuild-index 离线重建才对新旧数据生效(离线约束见 《Ubuntu 22.04 安装 Wren:DS 5.1.1 指南》 排障 11.3:在线跑会报 EnvironmentLockedException)。

5.3 连接处理器(端口与网络行为)

LDAP 明文处理器实测全量:

dn: cn=LDAP Connection Handler,cn=Connection Handlers,cn=config
ds-cfg-java-class: org.forgerock.opendj.reactive.LDAPConnectionHandler2
ds-cfg-enabled: true
ds-cfg-listen-address: 0.0.0.0
ds-cfg-listen-port: 1389
ds-cfg-accept-backlog: 128
ds-cfg-allow-ldap-v2: true
ds-cfg-keep-stats: true
ds-cfg-use-tcp-keep-alive: true
ds-cfg-use-tcp-no-delay: true
ds-cfg-allow-tcp-reuse-address: true
ds-cfg-send-rejection-notice: true
ds-cfg-max-request-size: 5 megabytes
ds-cfg-buffer-size: 4096 bytes
ds-cfg-max-blocked-write-time-limit: 2 minutes
ds-cfg-use-ssl: false
ds-cfg-ssl-cert-nickname: server-cert
ds-cfg-ssl-protocol: TLSv1.2
ds-cfg-allow-start-tls: TRUE
ds-cfg-key-manager-provider: cn=JKS,cn=Key Manager Providers,cn=config
ds-cfg-trust-manager-provider: cn=JKS,cn=Trust Manager Providers,cn=config
参数实测默认说明
ds-cfg-accept-backlog128TCP accept 队列,与 ss -ltn 里 Send-Q 128 一致
ds-cfg-max-request-size5 megabytes单条 PDU 上限,导入大批量 LDIF 时注意单条目大小
ds-cfg-use-tcp-keep-alivetrue空闲连接保活探测
ds-cfg-allow-ldap-v2true兼容 LDAPv2,纯 v3 环境可关
ds-cfg-allow-start-tlsTRUE明文端口上允许 StartTLS 升级(实测结果见 5.5)

LDAPS 处理器差异项实测:ds-cfg-use-ssl: true、ds-cfg-listen-port: 1636、ds-cfg-ssl-protocol: TLSv1.2。HTTP 处理器(REST)默认 ds-cfg-enabled: false、ds-cfg-listen-port: 8080,见 5.9。管理连接器独立成条:

dn: cn=Administration Connector,cn=config
ds-cfg-listen-address: 0.0.0.0
ds-cfg-listen-port: 4444
ds-cfg-ssl-protocol: TLSv1.2
ds-cfg-ssl-cert-nickname: admin-cert
ds-cfg-key-manager-provider: cn=Administration,cn=Key Manager Providers,cn=config
ds-cfg-trust-manager-provider: cn=Administration,cn=Trust Manager Providers,cn=config

5.4 密码策略与存储方案

Default 策略实测关键值:

dn: cn=Default Password Policy,cn=Password Policies,cn=config
ds-cfg-java-class: org.opends.server.core.PasswordPolicyFactory
ds-cfg-password-attribute: userPassword
ds-cfg-password-validator: cn=Length-Based Password Validator,cn=Password Validators,cn=config
ds-cfg-default-password-storage-scheme: cn=Salted SHA-1,cn=Password Storage Schemes,cn=config
ds-cfg-allow-user-password-changes: true
ds-cfg-lockout-failure-count: 0
ds-cfg-idle-lockout-interval: 0 seconds
ds-cfg-max-password-age: 0 seconds
ds-cfg-min-password-age: 0 seconds
ds-cfg-password-history-count: 0
ds-cfg-password-change-requires-current-password: false
ds-cfg-require-secure-authentication: false
ds-cfg-require-secure-password-changes: false
ds-cfg-state-update-failure-policy: reactive

长度校验器实测:

dn: cn=Length-Based Password Validator,cn=Password Validators,cn=config
ds-cfg-min-password-length: 6
ds-cfg-max-password-length: 0

弱口令拒绝实测:给新用户设 3 位口令被策略拦截:

root@wrends01:/opt/wren-ds# printf 'dn: uid=carol,ou=people,dc=example,dc=com\nchangetype: add\nobjectClass: top\nobjectClass: person\nobjectClass: organizationalPerson\nobjectClass: inetOrgPerson\nuid: carol\ncn: Carol\nsn: Zhou\nuserPassword: abc\n' > /tmp/carol.ldif
root@wrends01:/opt/wren-ds# ./bin/ldapmodify -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 -f /tmp/carol.ldif
Processing ADD request for uid=carol,ou=people,dc=example,dc=com
The LDAP modify request failed: 19 (Constraint Violation)
Additional Information:  The password value for attribute userPassword was
found to be unacceptable: The provided password is shorter than the minimum
required length of 6 characters

把口令换成 12 位后 ADD 成功。读回 userPassword 验证默认存储方案:

root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 \
  -b 'uid=carol,ou=people,dc=example,dc=com' '(objectClass=inetOrgPerson)' userPassword
dn: uid=carol,ou=people,dc=example,dc=com
userPassword: {SSHA}bRCYj2c66w5vyau7p5x1e/q86dhM4Gcj1IO1gw==

💡 技术拓展:口令存储方案(把明文口令变成目录里那串密文的算法)远不止 SSHA。5.1.1 实测注册了 17 种,主流几类对比——

方案前缀特点适用
Salted SHA-1{SSHA}快、有盐,SHA-1 碰撞弱点不影响口令存储但强度一般默认值,兼容老客户端
Salted SHA-512{SSHA512}同族更强摘要,Root DN 默认用它折中之选
PBES2/PBKDF2{PBKDF2}迭代拉伸,抗离线爆破生产推荐
Bcrypt{BCRYPT}自适应成本因子抗 GPU 爆破,验证慢
AES/3DES{AES} 等可逆加密需要把口令转发给后端系统的场景
Clear{CLEAR}明文仅测试

本机普通用户实测落在默认 {SSHA},Root DN 落在 {SSHA512};生产建议把 ds-cfg-default-password-storage-scheme 在线改为 PBKDF2 或 SSHA512。

其余校验器(实测均存在,默认仅 Length-Based 启用):Character Set、Dictionary、Repeated Characters、Similarity-Based、Unique Characters、Attribute Value。策略里所有锁定期限(lockout-failure-count、idle-lockout-interval、max-password-age、password-history-count)默认 0 即关闭,生产按需在线开启。Root 策略与 Default 策略的差异实测只有两处:存储方案 SSHA512、ds-cfg-password-change-requires-current-password: true。

5.5 TLS 与密钥管理

密钥体系实测四件套:

文件用途对应配置
config/keystore + keystore.pinLDAP/LDAPS/StartTLS 服务端证书 server-certcn=JKS,cn=Key Manager Providers
config/admin-keystore + admin-keystore.pin管理连接器证书 admin-certcn=Administration,cn=Key Manager Providers
config/truststore服务端信任库cn=JKS,cn=Trust Manager Providers
config/ads-truststore + .pin复制节点互信cn=Blind Trust / ads-truststore 后端

实测 keystore 内容:

root@wrends01:/opt/wren-ds# keytool -list -keystore config/keystore -storepass "$(cat config/keystore.pin)"
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

server-cert, Nov 2, 2026, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): 39:9A:91:83:AB:E4:0B:2F:AC:2B:07:3D:AE:25:4C:30:7B:94:86:2E:04:23:6E:A8:67:E2:C5:89:A1:98:48:F8

cn=Crypto Manager 实测 ds-cfg-ssl-cert-nickname: ads-certificate、ds-cfg-ssl-encryption: false(复制通道口令加密关闭)。

TLS 路径实测结论(本机 OpenJDK 17.0.20.1 + 5.1.1):

  • LDAPS 1636:openssl s_client -tls1_2 握手成功、证书可取回,但 ldapsearch -H ldaps:// 报 Can't contact LDAP server (-1)(B1 排障 11.1 已录);
  • StartTLS 1389:用自带客户端 -q 实测失败:
root@wrends01:/opt/wren-ds# ./bin/ldapsearch -p 1389 -q -D 'cn=Directory Manager' -w q1w2e3r4 \
  -b 'dc=example,dc=com' -s base '(objectClass=*)' dn
The LDAP search request failed: 81 (Server Connection Closed)
Additional Information:  An error occurred during establishment of a
connection: org.forgerock.opendj.ldap.LdapException: Local Error: SSL
handshake failed
  • 管理连接器 4444:握手成功但会话即断(3.3 实测)。
  • 服务端 logs/errors 实测累计 29 条 GRIZZLY0013: Exception during FilterChain execution ... ArrayIndexOutOfBoundsException ... SSLBaseFilter.java。

结论:5.1.1 的 TLS 传输层在该 JDK 组合下整体不可用,加密需求要么换 JDK 做回归,要么在网络层用 stunnel/反向代理终结 TLS,明文端口只绑回环或受控网段。

5.6 日志体系

access 日志器实测:

dn: cn=File-Based Access Logger,cn=Loggers,cn=config
ds-cfg-java-class: org.opends.server.loggers.TextAccessLogPublisher
ds-cfg-enabled: true
ds-cfg-log-file: logs/access
ds-cfg-log-file-permissions: 640
ds-cfg-suppress-internal-operations: true
ds-cfg-asynchronous: true
ds-cfg-rotation-policy: cn=24 Hours Time Limit Rotation Policy,cn=Log Rotation Policies,cn=config
ds-cfg-rotation-policy: cn=Size Limit Rotation Policy,cn=Log Rotation Policies,cn=config
ds-cfg-retention-policy: cn=File Count Retention Policy,cn=Log Retention Policies,cn=config

error 日志器实测:ds-cfg-default-severity 同时含 warning/error/notice,ds-cfg-asynchronous: false(错误日志同步写,保证崩溃前不丢),轮转 7 天 + 大小双策略。

实测日志目录与文件格式:

root@wrends01:/opt/wren-ds# ls -la logs/
total 268
drwxr-xr-x  2 root root  4096 Nov  2 14:11 .
drwxr-xr-x 18 root root  4096 Nov  2 12:40 ..
-rw-r-----  1 root root 33555 Nov  2 14:15 access
-rw-r-----  1 root root  2506 Nov  2 14:15 audit
-rw-r-----  1 root root 83785 Nov  2 14:14 errors
-rw-r--r--  1 root root 94423 Nov  2 14:15 ldap-access.audit.json
-rw-r-----  1 root root     0 Nov  2 12:40 replication
-rw-r--r--  1 root root 21035 Nov  2 14:14 server.out
-rw-r-----  1 root root     3 Nov  2 14:11 server.pid

access 日志一行一操作,实测样例(BIND/SEARCH/DISCONNECT 三段式,含耗时 etime 毫秒):

[02/Nov/2026:12:40:32 +0000] BIND REQ conn=0 op=0 msgID=1 version=3 type=SIMPLE dn="cn=Directory Manager"
[02/Nov/2026:12:40:32 +0000] BIND RES conn=0 op=0 msgID=1 result=0 authDN="cn=Directory Manager,cn=Root DNs,cn=config" etime=5
[02/Nov/2026:12:40:32 +0000] DISCONNECT conn=0 reason="Client Disconnect"

审计日志器实测默认就是启用状态(cn=File-Based Audit Logger enabled=true,logs/audit),且 JSON 版 access 审计(ldap-access.audit.json)也在写——排障时优先看这两个文件而不是 errors。

5.7 复制(多主同步)

提供者实测:

dn: cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config
ds-cfg-enabled: true
ds-cfg-java-class: org.opends.server.replication.plugin.MultimasterReplication

dn: cn=domains,cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config
objectClass: ds-cfg-branch
cn: domains

提供者默认启用但 cn=domains 为空,config.ldif 中实测无任何 ds-cfg-replication-server 条目——即本机是单节点、未初始化复制域。启用复制的官方路径是 dsreplication enable(需管理连接器),受 5.5 的 TLS 缺陷阻塞,实测无法在本机完成双节点初始化,故复制参数表仅给出配置面结构:每个复制域一个 cn=<baseDN>,cn=domains,... 条目,节点间用 4444 管理端口 + ads-truststore 互信,冲突解决依赖 ds-sync-conflict/ds-sync-hist 索引(5.2 实测存在)。待上游修复 TLS 后按官方 Admin Guide 的 dsreplication 流程实施。

5.8 条目缓存与工作队列

实测两个条目缓存器均为关闭:

dn: cn=FIFO,cn=Entry Caches,cn=config
ds-cfg-enabled: false
ds-cfg-cache-level: 1
ds-cfg-java-class: org.opends.server.extensions.FIFOEntryCache

dn: cn=Soft Reference,cn=Entry Caches,cn=config
ds-cfg-enabled: false
ds-cfg-cache-level: 2
ds-cfg-java-class: org.opends.server.extensions.SoftReferenceEntryCache

💡 技术拓展:条目缓存的淘汰策略不止 FIFO/软引用两种。对比——

策略机制特点
FIFO先进先出淘汰开销最小,命中率一般
Soft Reference交给 JVM GC 按内存压力回收与堆大小自适应
LRU(其他目录服务常见)最近最少使用命中率高但维护成本大

5.1.1 出厂两者皆关(实测),JE 后端自带页缓存兜底;高读场景可在线开启 FIFO 并配合堆内存调优。

工作队列实测:

dn: cn=Work Queue,cn=config
ds-cfg-java-class: org.opends.server.extensions.TraditionalWorkQueue
ds-cfg-max-work-queue-capacity: 1000

排队容量 1000,超出后新连接被拒(配合 max-allowed-client-connections 做入口限流)。

5.9 REST/HTTP 端点

HTTP 处理器默认关闭(5.3 实测),但端点配置已就位:

dn: ds-cfg-base-path=/api,cn=HTTP Endpoints,cn=config
objectClass: ds-cfg-rest2ldap-endpoint
ds-cfg-enabled: true
ds-cfg-base-path: /api
ds-cfg-config-directory: config/rest2ldap/endpoints/api

dn: ds-cfg-base-path=/admin,cn=HTTP Endpoints,cn=config

即:打开 cn=HTTP Connection Handler 的 ds-cfg-enabled 后,/api 提供 rest2ldap 数据接口(配置在 config/rest2ldap/endpoints/api),/admin 提供管理界面。这是 Wren:DS 区别于传统 LDAP 服务器的核心能力之一(选型依据见 《Wren:DS 介绍与选型指南》)。REST 接口的启用与调用属 API 篇范畴,本篇只交代配置面。

5.10 插件与 Root DN

实测默认启用的插件(cn=Plugins 下 ds-cfg-enabled: true):

dn: cn=Change Number Control,cn=Plugins,cn=config
dn: cn=Entry UUID,cn=Plugins,cn=config
dn: cn=Fractional Replication LDIF Import,cn=Plugins,cn=config
dn: cn=LastMod,cn=Plugins,cn=config
dn: cn=LDAP Attribute Description List,cn=Plugins,cn=config
dn: cn=Password Policy Import,cn=Plugins,cn=config
dn: cn=Profiler,cn=Plugins,cn=config

UID Unique Attribute 实测 ds-cfg-enabled: false——即默认不强制 uid 全局唯一(靠 schema 语法与索引去重),多值 uid 冲突场景应在线开启它。Referential Integrity、7-Bit Clean 也默认关闭。

Root DN 条目实测:

dn: cn=Directory Manager,cn=Root DNs,cn=config
ds-cfg-alternate-bind-dn: cn=Directory Manager
ds-rlim-size-limit: 0
ds-rlim-time-limit: 0
ds-rlim-idle-time-limit: 0
ds-rlim-lookthrough-limit: 0
ds-pwp-password-policy-dn: cn=Root Password Policy,cn=Password Policies,cn=config
userPassword: {SSHA512}fNKBmVosm/WYiSqRtF795pOTvWTQLsbMjzUMfRUQgeLWAQEAeshcl1G1MFI1UQNsEzqmCCvX1k1JDmJjrc42IRQIWo3GzH4M

四个 ds-rlim-* 全 0:Root DN 不受 5.1 的全局搜索限制约束,这也是运维脚本用 Directory Manager 跑大搜索不会撞 size-limit 的原因。

5.11 JVM 堆参数(java.properties)

服务端堆不在环境变量而在 config/java.properties,实测生效行与进程证据:

root@wrends01:/opt/wren-ds# grep -n 'start-ds.java-args' config/java.properties | grep -v '^#'
64:start-ds.java-args=-server -Xms256m -Xmx256m
root@wrends01:/opt/wren-ds# ps -ef | grep '[D]irectoryServer'
root       80       1 18 14:11 ?        00:00:05 /usr/bin/java -server -Xms256m -Xmx256m -Dorg.opends.server.scriptName=start-ds org.opends.server.core.DirectoryServer --configFile /opt/wren-ds/config/config.ldif

该文件按工具分档,实测全部 38 行非注释配置如下(grep -vE '^#|^$' config/java.properties):

start-ds.java-args=-server -Xms256m -Xmx256m
import-ldif.offline.java-args=-server
import-ldif.online.java-args=-Xms8m -client
export-ldif.offline.java-args=-server
export-ldif.online.java-args=-Xms8m -client
backup.offline.java-args=-server
backup.online.java-args=-Xms8m -client
restore.offline.java-args=-server
restore.online.java-args=-Xms8m -client
dsreplication.offline.java-args=-server
dsreplication.java-args=-Xms8m -client
verify-index.java-args=-server
rebuild-index.java-args=-server
backendstat.java-args=-server
ldifdiff.java-args=-server
ldifmodify.java-args=-server
ldifsearch.java-args=-server
makeldif.java-args=-server
upgrade.java-args=-server
encode-password.java-args=-server
ldapsearch.java-args=-Xms8m -client -Djdk.tls.client.protocols=TLSv1.2
ldapmodify.java-args=-Xms8m -client
ldapdelete.java-args=-Xms8m -client
ldapcompare.java-args=-Xms8m -client
ldappasswordmodify.java-args=-Xms8m -client
dsconfig.java-args=-Xms8m -client -Djdk.tls.client.protocols=TLSv1.2
list-backends.java-args=-Xms8m -client
manage-account.java-args=-Xms8m -client
manage-tasks.java-args=-Xms8m -client
status.java-args=-Xms8m -client
stop-ds.java-args=-Xms8m -client
control-panel.java-args=-Xms64m -Xmx128m -client
setup.java-args=-Xms8m -client
uninstall.java-args=-Xms8m -client
create-rc-script.java-args=-Xms8m -client
base64.java-args=-Xms8m -client
overwrite-env-java-home=false
overwrite-env-java-args=false

规律:操作数据库的重工具(离线导入/导出、备份/恢复、索引校验重建、复制初始化、ldif 比对)走 -server 大堆档,轻客户端工具 -Xms8m -client。另有两处值得注意的实测发现:ldapsearch 与 dsconfig 两行带 -Djdk.tls.client.protocols=TLSv1.2,即发行包自带把这两个工具的 TLS 客户端钉在 1.2 的补偿参数(与 5.5 的握手缺陷相关,但实测仍不足以修复服务端传输层问题)。改任何一行都要重启对应进程才生效;start-ds 行改完重启服务,用 ps -ef 复核(同 《Ubuntu 22.04 安装 Wren:DS 5.1.1 指南》 第七章)。

六、生产配置模板

适用场景:16GB 内存、SSD、万级条目、读多写少的企业目录(认证绑定+应用查询)。JVM 堆遵循 256–512MB 上限约束取 512m,其余为在线可改项,全部给出 ldapmodify 载荷。

root@wrends01:/opt/wren-ds# cat > /tmp/prod-tune.ldif <<'EOF'
dn: cn=config
changetype: modify
replace: ds-cfg-lookthrough-limit
ds-cfg-lookthrough-limit: 10000
-
replace: ds-cfg-time-limit
ds-cfg-time-limit: 30 seconds
-
replace: ds-cfg-reject-unauthenticated-requests
ds-cfg-reject-unauthenticated-requests: true
-
replace: ds-cfg-max-allowed-client-connections
ds-cfg-max-allowed-client-connections: 2000
-
replace: ds-cfg-default-password-storage-scheme
ds-cfg-default-password-storage-scheme: cn=Salted SHA-512,cn=Password Storage Schemes,cn=config

dn: cn=Default Password Policy,cn=Password Policies,cn=config
changetype: modify
replace: ds-cfg-lockout-failure-count
ds-cfg-lockout-failure-count: 5
-
replace: ds-cfg-lockout-duration
ds-cfg-lockout-duration: 10 minutes
-
replace: ds-cfg-max-password-age
ds-cfg-max-password-age: 90 days
-
replace: ds-cfg-require-secure-authentication
ds-cfg-require-secure-authentication: true

dn: cn=FIFO,cn=Entry Caches,cn=config
changetype: modify
replace: ds-cfg-enabled
ds-cfg-enabled: true
EOF
root@wrends01:/opt/wren-ds# ./bin/ldapmodify -p 1389 -D 'cn=Directory Manager' -w q1w2e3r4 -f /tmp/prod-tune.ldif

⚠️ 模板中 ds-cfg-require-secure-authentication: true 要求口令修改/绑定走 TLS——在 5.5 的 TLS 缺陷修复前开启会把所有明文绑定拒掉,请配合 stunnel 或修复后的 TLS 再启用;其余各项已在本机实测通道(3.2)可在线生效。堆内存改 java.properties 第 64 行为 -Xms512m -Xmx512m 并重启,验收口径:ps -ef 见 512m、logs/errors 见 536870912 bytes heap size。

七、常见问题

  1. dsconfig/status 报 Server Connection Closed 或连不上 4444:5.1.1 + OpenJDK 17.0.20 的 TLS 传输层缺陷(5.5 实测 29 条 GRIZZLY0013)。绕法:在线配置走 ldapmodify cn=config(3.2),离线走停机改文件(3.4)。
  2. 运行中编辑 config.ldif 不生效/被覆盖:文件只在启动时读入,内存态在保存配置时反向覆盖磁盘。改配置用 3.2 通道,或先 stop-ds。
  3. 设短口令报 Constraint Violation (19):Length-Based 校验器 min-password-length: 6(5.4 实测回显),属预期行为;要放宽就改校验器条目而非关策略。
  4. 匿名客户端能读到根条目:reject-unauthenticated-requests: false 默认值所致(5.1 实测),按生产模板改 true。
  5. 改了 lookthrough-limit 想确认是否落盘:grep ds-cfg-lookthrough-limit config/config.ldif,在线改会即时写回(3.2 实测第 40 行变化)。
  6. rebuild-index/verify-index 在线跑报 ENV_LOCKED:JE 写锁互斥,必须停机执行(B1 排障 11.3 实录)。

八、参考链接

Wren:DS 5.1.1 配置参数详解 - Quzuo