Apache ZooKeeper 协调服务测评

Apache ZooKeeper 三级等保现场测评取证命令单:按控制点组织 zoo.cfg、四字命令白名单、ACL 与 SASL 认证核查命令、判定要点与取证要求。

定位:Apache ZooKeeper 三级等保现场测评取证命令单,按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。 适用范围:Apache ZooKeeper 3.4/3.5/3.6/3.7 单机、伪集群、集群场景。 配套文章:22、高风险判定指引与加固对照表、16、安全评估加固记录表3.0、21、Web中间件安全加固。

使用说明:

  • 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
  • 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排;命令回显本身即证据,须连同命令行一起截图。
  • 命令不存在或输出与示例差异较大时,先确认组件版本与部署形态(包管理器/源码编译/容器),再换用等效命令或转入配置文件、管理控制台取证,不得据命令缺失直接判不符合。
  • 示例输出中的地址、账户、路径均为演示值,现场须替换为真实取证结果并对涉及个人信息与内网管理地址的内容脱敏后再入报告。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019 的对象边界原则;ZooKeeper 属于协调组件,业务型控制点需结合其是否承载业务数据、是否启用管理接口判定。

基础信息

对应控制点:非独立控制点(测评对象与资产确认);部署形态与冗余情况佐证 8.1.2.1 网络架构 e) 关键设备硬件冗余

判定要点:版本、部署路径、运行账户、监听端口、集群角色五项均可取证且与实际架构一致 → 符合;版本或路径无法确认、依赖口头说明 → 部分符合。

取证要求:版本命令回显截图、配置路径截图、进程与运行账户截图、端口监听截图;集群部署补节点清单与角色截图。

核查命令:

zkServer.sh version 2>/dev/null
ps -ef | grep zookeeper
find / -name zoo.cfg 2>/dev/null
  • 备注:确认版本、节点角色、集群、端口、配置文件、数据目录和日志目录。
  • 预期证据:版本截图、进程截图、配置路径截图、端口截图。
示例输出(节选)
zkServer.sh version
Apache ZooKeeper, version 3.8.4 2024-02-14 06:34 UTC
ps -ef | grep zookeeper
zookeeper 4401 java -Dzookeeper.log.dir=/data/zk/logs ... QuorumPeerMain
/opt/zookeeper/conf/zoo.cfg

身份鉴别

对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)

判定要点:管理账户唯一且非默认口令、鉴别信息复杂度与有效期均已配置、远程管理走加密通道、失败处理与会话超时已启用 → 符合;仅满足其中一部分(如有口令但无复杂度/无锁定/无超时)→ 部分符合;管理入口无鉴别或沿用出厂口令 → 不符合(高风险)。

取证要求:账户清单截图、口令策略配置截图、加密通道配置截图、失败锁定与超时配置截图;由统一认证平台承载时补平台侧配置与对接截图。

A. 管理接口识别

核查命令:

grep -R "admin.serverPort\\|4lw.commands.whitelist" /etc/zookeeper /opt 2>/dev/null
  • 备注:重点核查 AdminServer、四字命令和 JMX 接口。
  • 预期证据:配置截图、接口截图。
示例输出(节选)
/etc/zookeeper/zoo.cfg: admin.serverPort=8080
/opt/zookeeper/conf/zoo.cfg: 4lw.commands.whitelist=stat, srvr, mntr
(四字命令白名单收敛,admin server 仅内网访问)

B. 认证机制

核查命令:

grep -R "authProvider\\|requireClientAuthScheme\\|superDigest" /etc/zookeeper /opt 2>/dev/null
  • 备注:核查 Digest、SASL、Kerberos、TLS 客户端认证。
  • 预期证据:认证配置截图、平台材料。
示例输出(节选)
/opt/zookeeper/conf/zoo.cfg: authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
/etc/zookeeper/jaas.conf: Server { org.apache.zookeeper.server.auth.DigestLoginModule required user_mid="***"; };
superDigest 未配置明文(经 SASL 管理)

C. 登录失败与会话控制

核查命令:

grep -R "sessionTimeout\\|maxClientCnxns" /etc/zookeeper /opt 2>/dev/null
  • 备注:ZooKeeper 一般无人工登录控制台,更多是客户端连接控制。
  • 【不适用】若未启用独立人工登录管理界面,则人工登录失败锁定类控制点对 ZooKeeper 不适用。
  • 预期证据:配置截图、等效控制材料。
示例输出(节选)
/etc/zookeeper/zoo.cfg: sessionTimeout 未显式设置(默认 60s tickTime*2)
maxClientCnxns=60

D. 运维鉴别链路

核查命令:

grep -R "ssl\\|secureClientPort\\|serverCnxnFactory" /etc/zookeeper /opt 2>/dev/null
  • 备注:运维和客户端接入应关注 TLS、堡垒机和来源限制。
  • 预期证据:TLS 截图、运维制度。
示例输出(节选)
grep ssl zoo.cfg
secureClientPort=2182
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=/etc/zookeeper/ssl/keystore.jks
ssl.trustStore.location=/etc/zookeeper/ssl/truststore.jks
(明文 2181 已关闭,仅 2182 TLS 接入)

访问控制

对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~f)

判定要点:账户与角色齐备且权限最小化、默认账户已重命名或改口令、无多余/过期/共享账户、管理来源受限制 → 符合;有账户体系但权限未按最小化分配或管理来源未限制 → 部分符合;全员共用超级账户、管理端口对全网开放 → 不符合(高风险)。

取证要求:账户与角色对应表、授权策略截图、管理来源限制(ACL/绑定地址/防火墙策略)截图、多余账户处置记录。

A. ZNode ACL

核查命令:

zkCli.sh getAcl / 2>/dev/null
  • 备注:重点核查关键 ZNode 的 ACL、超级用户和匿名访问控制。
  • 预期证据:ACL 截图、权限说明。
示例输出(节选)
zkCli.sh getAcl /
'world,'anyone
: cdrwa
(根节点 ACL 为 anyonone 全权,应整改为 digest 认证;业务节点已收敛,见下)
zkCli.sh getAcl /demo
'digest,'mid-user:***
: cdrwa

B. 管理接口来源限制

核查命令:

grep -R "admin.serverPort\\|4lw.commands.whitelist\\|clientPortAddress" /etc/zookeeper /opt 2>/dev/null
  • 备注:四字命令、管理端口和客户端端口应限制来源。
  • 预期证据:配置截图、网络材料。
示例输出(节选)
admin.serverPort=8080
4lw.commands.whitelist=srvr,mntr
clientPortAddress=192.168.10.41
(管理端口与四字命令已收敛,客户端仅监听内网地址)

C. 默认配置与测试节点

核查命令:

grep -R "guest\\|anonymous" /etc/zookeeper /opt 2>/dev/null
  • 备注:默认开放四字命令、匿名访问和测试节点应清理或限制。
  • 预期证据:配置截图、处置说明。
示例输出(节选)
grep guest/anonymous /etc /opt
(无输出,未发现匿名账户相关配置残留)

D. 文件与进程权限

核查命令:

ls -l zoo.cfg 2>/dev/null
ps -o user,pid,cmd -C java
  • 备注:配置、日志和数据目录权限应最小化,运行用户不宜过高。
  • 预期证据:权限截图、运行用户截图。
示例输出(节选)
-rw-r--r-- 1 root root 985 zoo.cfg
(配置文件全局可读,建议 chmod 640 并属主 root:zookeeper)
USER PID COMMAND
zookeeper 4401 java QuorumPeerMain

安全审计

对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)

判定要点:审计功能启用且覆盖每个用户与重要行为、审计记录字段齐全、审计记录受保护并定期备份、留存不少于 6 个月 → 符合;仅记录部分事件或留存不足 6 个月 → 部分符合;审计未启用或普通用户可删改审计记录 → 不符合(高风险)。

取证要求:审计开关与范围配置截图、审计记录明细样例(含时间、用户、事件类型、结果、来源)、日志外送与轮转配置截图、留存期限证据、非审计账户尝试删改的实测结果。

A. 日志配置

核查命令:

find logs -type f 2>/dev/null
find conf -type f | grep -E "log4j|logback" 2>/dev/null
  • 备注:核查服务日志、认证日志和异常日志。
  • 预期证据:日志目录截图、配置截图。
示例输出(节选)
find logs
/data/zk/logs/zookeeper-root-server-1.out
/data/zk/logs/zookeeper.log
find conf | grep log4j
conf/log4j.properties

B. 日志样例

核查命令:

tail -n 20 logs/* 2>/dev/null
  • 备注:应证明连接、异常和管理操作留痕。
  • 预期证据:日志样例、平台截图。
示例输出(节选)
tail logs/zookeeper.log(节选)
2026-08-24 09:00:01,001 [myid:1] INFO [QuorumPeer[myid=1]] Leader election voting...
2026-08-24 10:12:33,884 [myid:1] WARN [NIOServerCxn.AcceptThread] Client failed to authenticate using SASL: mid-test
2026-08-24 10:15:02,110 [myid:1] INFO [ProcessThread] Established session 0x1002... with timeout 60000

C. 留存与轮转

核查命令:

grep -R "RollingFileAppender\\|maxBackupIndex" conf 2>/dev/null
  • 备注:需核实日志留存和轮转策略。
  • 预期证据:配置截图、制度、访谈记录。
示例输出(节选)
grep conf/log4j.properties
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.MaxBackupIndex=10
(按大小轮转保留 10 个备份,配合外部清理脚本)

D. 集中审计

核查命令:

journalctl | grep zookeeper | tail -n 50
  • 备注:如日志进入平台,应补平台证据。
  • 预期证据:平台截图、告警截图。
示例输出(节选)
journalctl | grep zookeeper(节选)
Aug 24 08:59:50 host systemd[1]: Started Apache ZooKeeper.
Aug 24 09:00:05 host zk[4401]: [myid:1] INFO Snapshot taken: snapshot.1002
Aug 24 10:12:33 host zk[4401]: WARN Client failed to authenticate using SASL

数据完整性

对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)b)

判定要点:配置与关键数据在传输/存储过程中具备校验或完整性保护机制(TLS、签名、校验和、配置版本归档)→ 符合;仅有部分链路具备校验 → 部分符合;无任何完整性校验手段 → 不符合。

取证要求:传输加密配置截图、校验/签名机制说明、配置变更与归档记录、完整性检测工具输出。

A. 集群一致性

核查命令:

echo stat | nc 127.0.0.1 2181 2>/dev/null
echo mntr | nc 127.0.0.1 2181 2>/dev/null
  • 备注:重点核查节点状态、选主、同步和事务日志。
  • 预期证据:状态截图、架构说明。
示例输出(节选)
echo stat | nc 127.0.0.1 2181(节选)
Zookeeper version: 3.8.4, built on 02/14/2024
Latency min/avg/max: 0/0.5/21
Mode: follower
echo mntr | nc 127.0.0.1 2181
zk_version	3.8.4
zk_server_state	follower
zk_peer_state	following - broadcast

B. 传输完整性

核查命令:

grep -R "secureClientPort\\|ssl" conf /etc/zookeeper 2>/dev/null
  • 备注:客户端和节点间通信如使用 TLS,应明确其作用。
  • 预期证据:TLS 配置截图、证书材料。
示例输出(节选)
grep secureClientPort conf
secureClientPort=2182
serverCnxnFactory=NettyServerCnxnFactory
ssl.quorum.keyStore.location=/etc/zookeeper/ssl/quorum.jks
(集群内部通信亦启用 TLS)

数据保密性

对应控制点:GB/T 22239-2019 8.1.4.8 数据保密性 a)b)

判定要点:鉴别信息与敏感业务数据在传输和存储时均加密(TLS 1.2 及以上、口令散列存储、密钥不落明文)→ 符合;仅传输加密或仅存储加密 → 部分符合;明文传输鉴别信息或明文存储口令/密钥 → 不符合(高风险)。

取证要求:TLS 配置与证书信息截图、协议与加密套件清单、口令/密钥存储形态截图、抓包验证结果;使用国密算法时注明算法与模块。

A. TLS 与证书

核查命令:

grep -R "ssl.keyStore.location\\|ssl.trustStore.location" conf /etc/zookeeper 2>/dev/null
  • 备注:管理和敏感接入链路应优先加密。
  • 预期证据:TLS 截图、证书截图。
示例输出(节选)
grep ssl.keyStore/trustStore conf
ssl.keyStore.location=/etc/zookeeper/ssl/keystore.jks
ssl.trustStore.location=/etc/zookeeper/ssl/truststore.jks
(keystore 口令经环境变量注入,文件权限 600)

B. 敏感配置保护

核查命令:

grep -R "password\\|digest\\|secret" conf /etc/zookeeper 2>/dev/null
  • 备注:超级用户、Digest、证书和 JAAS 配置需重点核查。
  • 预期证据:脱敏截图、权限说明。
示例输出(节选)
grep password/digest/secret conf
jaas.conf: user_mid="***";
(口令均为掩码或加密注入,未见明文)

备份恢复

对应控制点:GB/T 22239-2019 8.1.4.9 数据备份恢复 a)c)

判定要点:配置与关键数据具备本地备份、备份可恢复且经过演练、具备主备或集群冗余 → 符合;有备份但无恢复演练记录,或仅有冗余无备份 → 部分符合;无任何备份与冗余措施 → 不符合(高风险)。

取证要求:备份策略与备份文件清单截图、恢复演练记录、集群/主备状态截图、备份介质与异地存放说明。

A. 配置备份

核查命令:

find conf /etc/zookeeper -type f 2>/dev/null
  • 备注:应覆盖 zoo.cfg、JAAS、证书和脚本配置。
  • 预期证据:备份目录截图、策略说明。
示例输出(节选)
find conf /etc/zookeeper
conf/zoo.cfg
conf/log4j.properties
conf/jaas.conf
/etc/zookeeper/ssl/keystore.jks
/etc/zookeeper/ssl/truststore.jks

B. 数据与日志备份

核查命令:

find data logs -type f 2>/dev/null | head
  • 备注:快照和事务日志备份策略需明确。
  • 预期证据:目录截图、备份说明。
示例输出(节选)
find data logs | head
data/version-2/snapshot.1002
data/version-2/log.1001
logs/zookeeper.log
logs/archive/snapshot.900.gz

C. 恢复能力

核查命令:

echo srvr | nc 127.0.0.1 2181 2>/dev/null
  • 备注:应通过节点恢复、快照恢复和集群重建说明恢复能力。
  • 预期证据:恢复手册、演练记录、工单。
示例输出(节选)
echo srvr | nc 127.0.0.1 2181
Zookeeper version: 3.8.4
Mode: leader
Node count: 1523
(集群正常,快照与事务日志由 dataDir 每日备份)

剩余信息保护

对应控制点:GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)

判定要点:鉴别信息与敏感数据所在存储空间在释放或清除前得到完全清除(口令散列不可逆、临时文件与旧配置定期清理、介质报废有销毁记录)→ 符合;部分清理但无制度与记录 → 部分符合;明文口令残留、旧配置与备份文件长期堆积在生产目录 → 不符合。

取证要求:清理策略与计划任务截图、残留排查命令输出、介质销毁与设备报废记录、制度文件。

A. 历史快照与旧日志

核查命令:

find data logs -type f | grep -E "snapshot|log|old|bak|backup" 2>/dev/null
  • 备注:旧快照、事务日志和历史配置应清理或归档。
  • 预期证据:目录截图、清理说明。
示例输出(节选)
find data logs | grep snapshot|log|old|backup
data/version-2/snapshot.1002
data/version-2/log.1001
/var/backup/zk/snapshot-20260823.tar.gz
logs/archive/snapshot.900.gz

B. 凭据残留

核查命令:

grep -R "password\\|secret\\|digest" . 2>/dev/null
  • 备注:配置、日志和脚本中的敏感信息残留应重点核查。
  • 预期证据:脱敏截图、整改说明。
示例输出(节选)
grep password/secret/digest .(节选)
conf/jaas.conf: user_mid="***"
logs/zookeeper.log: WARN Client failed to authenticate (no plaintext secrets logged)

个人信息保护

对应控制点:GB/T 22239-2019 8.1.4.11 个人信息保护 a)b)

判定要点:仅采集和保存业务必需的个人信息、禁止未授权访问与非法使用(日志字段最小化、访问受权限控制、导出有审批)→ 符合;有访问控制但未做字段最小化或无导出管控 → 部分符合;日志或配置中明文记录身份证、手机号、令牌等且无访问控制 → 不符合(高风险)。

取证要求:日志格式与字段清单截图、样例日志(脱敏后)、个人信息访问权限配置、导出审批记录;不涉及个人信息时留存数据流说明作为不适用依据。

A. ZNode 数据中的个人信息

核查命令:

zkCli.sh ls / 2>/dev/null
  • 备注:通常不建议直接查看敏感节点内容,应结合业务访谈判断。
  • 【不适用】若 ZooKeeper 仅存储协调元数据、注册信息和非个人信息配置,则该点不适用。
  • 预期证据:节点清单截图、业务说明、访谈记录。
示例输出(节选)
zkCli.sh ls /
[admin, brokers, demo, consumers, zookeeper]
(业务 znode 均配置了 digest ACL,匿名不可写)

B. 导出与共享控制

核查命令:

find . -type f | grep -i "export\\|dump" 2>/dev/null
  • 备注:备份导出、运维脚本和客户端工具需关注个人信息扩散风险。
  • 【不适用】若不承载个人信息,则该点不适用。
  • 预期证据:权限说明、制度、访谈记录。
示例输出(节选)
find . | grep export|dump
scripts/export-tree.sh
(存在导出脚本,执行需审批并输出至受控目录)

入侵防范

对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~h)、8.1.4.5 恶意代码防范

判定要点:遵循最小安装、关闭多余服务与高危端口、管理终端受限、具备数据有效性检验、及时修补漏洞并有加固记录 → 符合;部分项缺失但有等效补偿(WAF/IPS/主机加固)且证据齐全 → 部分符合;存在未修补高危漏洞或高危端口对全网开放且无补偿 → 不符合(高风险)。

取证要求:组件与服务清单、端口扫描结果、管理终端限制配置、漏洞扫描与修补记录、基线加固对照表、攻击告警或阻断记录。

A. 管理接口与四字命令暴露

核查命令:

grep -R "admin.serverPort\\|4lw.commands.whitelist\\|clientPortAddress" /etc/zookeeper /opt 2>/dev/null
  • 备注:重点核查 AdminServer、四字命令和客户端端口是否暴露到无关网络。
  • 预期证据:配置截图、端口截图、网络材料。
示例输出(节选)
grep admin.serverPort/whitelist/clientPortAddress conf
admin.serverPort=8080(仅绑定内网,防火墙限制来源)
4lw.commands.whitelist=srvr,mntr
clientPortAddress=192.168.10.41

B. 匿名访问与危险配置

核查命令:

grep -R "authProvider\\|superDigest\\|anonymous" /etc/zookeeper /opt 2>/dev/null
  • 备注:应关注匿名访问、超级用户、宽松 ACL 和测试配置。
  • 预期证据:配置截图、ACL 截图、处置说明。
示例输出(节选)
grep authProvider/superDigest/anonymous conf
authProvider.1=SASLAuthenticationProvider
(未启用匿名访问,super 账户经 SASL 集中管理)

C. 版本与漏洞风险

核查命令:

zkServer.sh version 2>/dev/null
  • 备注:需确认版本、补丁和高危漏洞整改情况。
  • 预期证据:版本截图、补丁或整改记录。
示例输出(节选)
zkServer.sh version
Apache ZooKeeper, version 3.8.4
(版本较新,CVE 修复情况见补丁台账)

D. 防护与告警联动

核查命令:

tail -n 20 logs/* 2>/dev/null
  • 备注:ZooKeeper 入侵防范通常依赖网络隔离、主机防护和日志告警平台联动。
  • 预期证据:平台截图、告警记录、主机防护材料。
示例输出(节选)
tail logs/zookeeper.log(节选)
2026-08-24 10:12:33,884 WARN Client failed to authenticate using SASL: mid-test
2026-08-24 10:12:35,001 INFO Closed socket connection for client /192.168.8.66
(认证失败记录完整并联动防火墙封禁、上送安全平台告警)

参考依据

关联文章