各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言!
依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级”安全计算环境” 条款,结合ZooKeeper官方安全指南及现场测评实践。
适用版本:ZooKeeper 3.5.x / 3.6.x / 3.7.x / 3.8.x / 3.9.x
一、身份鉴别
1.1 服务端认证配置
| 控制项 | 测评命令/配置 | 达标判据 |
|---|---|---|
| 客户端认证 | zoo.cfg authProvider | 启用SASL认证 |
| 超级用户 | zoo.cfg superUser | 配置超级用户 |
| 管理员认证 | zoo.cfg admin.* | 启用管理员认证 |
| 证书认证 | zoo.cfg ssl.* | 启用SSL/TLS |
| 会话超时 | zoo.cfg maxSessionTimeout | 合理设置 |
ZooKeeper特有配置:
# 查看ZooKeeper配置目录
ls-la$ZK_HOME/conf/
# 查看核心配置文件
cat$ZK_HOME/conf/zoo.cfg
# 关键安全配置检查
grep-E"authProvider|superUser|admin|digest|kerberos|ssl|sasl"$ZK_HOME/conf/zoo.cfg
# 关键配置项:
# authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
# authProvider.2=org.apache.zookeeper.server.auth.DigestAuthenticationProvider
# superUser=super:admin
# admin.enableServer=true
# admin.serverPort=8080
# admin.requireClientAuthScheme=sasl
# sessionRequireClientSASLAuth=true
# maxSessionTimeout=60000
# 查看Java认证配置(JAAS)
cat$ZK_HOME/conf/jaas.conf
# 关键配置:
# Server {
# org.apache.zookeeper.server.auth.DigestLoginModule required
# user_super="super_secret"
# user_admin="admin_secret"
# user_kafka="kafka_secret";
# };
# 查看Kerberos配置(如启用)
cat$ZK_HOME/conf/zoo.cfg |grep-E"kerberos|principal|keytab"
cat$ZK_HOME/conf/krb5.conf 2>/dev/null
# 查看管理员服务器配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"admin|admin.server"
# 查看四字命令白名单(安全加固)
cat$ZK_HOME/conf/zoo.cfg |grep"4lw.commands.whitelist"
# 应限制为:srvr, mntr, conf, ruok(生产环境)
# 查看会话认证要求
cat$ZK_HOME/conf/zoo.cfg |grep"sessionRequireClientSASLAuth"
# 应设置为true(强制客户端认证)
1.2 客户端认证配置
# 查看客户端JAAS配置
cat$ZK_HOME/conf/jaas-client.conf 2>/dev/null
# 关键配置:
# Client {
# org.apache.zookeeper.server.auth.DigestLoginModule required
# username="kafka"
# password="kafka_secret";
# };
# 查看客户端SSL配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"client.ssl|ssl.client"
# 查看ZooKeeper客户端连接字符串(应包含认证信息)
cat /etc/kafka/server.properties 2>/dev/null |grep"zookeeper.connect"
cat$FLINK_HOME/conf/flink-conf.yaml 2>/dev/null |grep"zookeeper.connect"
# 验证客户端认证(zkCli.sh)
zkCli.sh -server localhost:2181
# 连接后执行:
# addauth digest user:password
# 或
# addauth sasl user:password
二、访问控制
2.1 ACL(访问控制列表)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 节点ACL | getAcl /path | 配置合理ACL |
| 默认ACL | skipACL配置 | 不跳过ACL检查 |
| IP白名单 | setAcl ip:192.168.1.0/24 | 限制客户端IP |
| 超级用户权限 | superUser使用 | 最小化使用 |
ZooKeeper特有配置:
# 连接ZooKeeper并检查ACL
zkCli.sh -server localhost:2181
# 查看根节点ACL
getAcl /
# 查看关键节点ACL
getAcl /zookeeper
getAcl /zookeeper/config
getAcl /brokers 2>/dev/null # Kafka
getAcl /hbase 2>/dev/null # HBase
getAcl /flink 2>/dev/null # Flink
getAcl /yarn-leader-election 2>/dev/null # YARN
# 查看ACL配置模式
# world:anyone:cdrwa - 危险,任何人可访问
# auth:user:password:cdrwa - 认证用户
# digest:user:hash:cdrwa - 摘要认证
# host:hostname:cdrwa - 主机限制
# ip:192.168.1.0/24:cdrwa - IP限制
# sasl:user:cdrwa - SASL认证
# 查看是否跳过ACL检查(危险配置)
grep"skipACL"$ZK_HOME/conf/zoo.cfg
# 应设置为no或注释掉
# 查看超级用户配置
grep"superUser"$ZK_HOME/conf/zoo.cfg
# 查看节点配额(资源限制)
listquota /path
# 或
get /zookeeper/quota/path
# 查看节点限制配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"jute.maxbuffer|maxClientCnxns"
# 关键配置:
# maxClientCnxns=60 # 单IP最大连接数
# jute.maxbuffer=4194304 # 最大数据包大小(4MB)
2.2 网络访问控制
# 查看ZooKeeper端口配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"clientPort|secureClientPort|admin.serverPort"
# 关键端口:
# clientPort=2181 # 客户端端口(明文)
# secureClientPort=2182 # 安全客户端端口(SSL)
# admin.serverPort=8080 # 管理员接口
# 查看绑定地址
cat$ZK_HOME/conf/zoo.cfg |grep-E"clientPortAddress|admin.serverAddress"
# 应绑定具体IP,而非0.0.0.0
# clientPortAddress=192.168.1.100
# 查看防火墙规则
iptables -L-n|grep-E"2181|2182|2888|3888|8080"
firewall-cmd --list-all |grep-E"2181|2182|2888|3888|8080"
# 查看集群通信端口(Leader选举)
cat$ZK_HOME/conf/zoo.cfg |grep-E"server\.[0-9]+"
# server.1=zoo1:2888:3888
# 2888 - Leader端口
# 3888 - 选举端口
# 查看集群成员
cat$ZK_HOME/conf/zoo.cfg |grep"^server\."
cat$ZK_HOME/data/myid
# 查看peerType(观察者/参与者)
cat$ZK_HOME/conf/zoo.cfg |grep"peerType"
三、安全审计
3.1 日志与审计配置
| 控制项 | 测评命令/配置 | 达标判据 |
|---|---|---|
| 事务日志 | zoo.cfg dataLogDir | 独立存储 |
| 快照日志 | zoo.cfg dataDir | 定期清理 |
| 审计日志 | zoo.cfg audit.enable | 启用审计(3.6+) |
| 日志保留 | 清理脚本 | ≥6个月 |
| 日志保护 | 文件权限 | 640 zookeeper |
ZooKeeper特有配置:
# 查看日志配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"dataDir|dataLogDir|log4j"
# 关键配置:
# dataDir=/var/lib/zookeeper/data # 快照目录
# dataLogDir=/var/lib/zookeeper/logs # 事务日志目录(应独立磁盘)
# 查看事务日志
ls-la$ZK_HOME/data/version-2/
ls-la /var/lib/zookeeper/data/version-2/
# 查看事务日志文件
ls-la /var/lib/zookeeper/logs/version-2/
# 查看日志文件权限
ls-la /var/lib/zookeeper/data/ |head-5
ls-la /var/lib/zookeeper/logs/ |head-5
# 查看审计日志配置(ZooKeeper 3.6+)
cat$ZK_HOME/conf/zoo.cfg |grep-E"audit|audit.enable"
# 关键配置:
# audit.enable=true
# audit.impl.class=org.apache.zookeeper.audit.ZKAuditProvider
# 查看审计日志输出
cat$ZK_HOME/conf/log4j.properties |grep-i audit
# 查看审计日志文件
ls-la$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null
tail-20$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null
# 查看标准日志
ls-la$ZK_HOME/logs/zookeeper-*.out
tail-50$ZK_HOME/logs/zookeeper-*.out
# 查看GC日志
ls-la$ZK_HOME/logs/zookeeper_gc.log* 2>/dev/null
# 查看日志保留策略
cat$ZK_HOME/conf/log4j.properties |grep-E"MaxFileSize|MaxBackupIndex|DailyRollingFileAppender"
# 查看自动清理配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"autopurge|purge"
# 关键配置:
# autopurge.snapRetainCount=3
# autopurge.purgeInterval=24
3.2 审计事件分析
# 查看审计日志内容(3.6+)
cat$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null |tail-50
# 审计事件类型:
# sessionStart/sessionStop - 会话开始/结束
# create/delete - 节点创建/删除
# setData - 数据修改
# setAcl - ACL变更
# multi - 批量操作
# reconfig - 配置变更
# 查看会话审计
grep"sessionStart\|sessionStop"$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null |tail-20
# 查看节点变更审计
grep"create\|delete\|setData"$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null |tail-20
# 查看ACL变更审计
grep"setAcl"$ZK_HOME/logs/zookeeper_audit.log 2>/dev/null |tail-20
# 查看异常操作
grep"error\|denied\|unauthorized"$ZK_HOME/logs/zookeeper-*.out 2>/dev/null |tail-20
# 查看四字命令使用(如启用审计)
grep"mntr\|ruok\|conf\|stat"$ZK_HOME/logs/zookeeper-*.out 2>/dev/null |tail-20
四、入侵防范
4.1 系统加固
# 查看ZooKeeper版本(确认最新补丁)
cat$ZK_HOME/RELEASE 2>/dev/null
cat$ZK_HOME/CHANGES.txt 2>/dev/null |head-20
echo"stat"|nc localhost 21812>/dev/null |grep"Zookeeper version"
# 查看CVE漏洞(需外部扫描)
# 检查是否使用存在漏洞的版本(如CVE-2019-0201, CVE-2020-9485等)
# 查看四字命令白名单(安全加固)
cat$ZK_HOME/conf/zoo.cfg |grep"4lw.commands.whitelist"
# 生产环境应限制为:
# 4lw.commands.whitelist=srvr,mntr,conf,ruok
# 禁用:dump, envi, reqs, stat, wchs, wchc, wchp(信息泄露风险)
# 查看管理员接口安全
cat$ZK_HOME/conf/zoo.cfg |grep-E"admin|admin.server"
# 建议配置:
# admin.enableServer=true
# admin.serverPort=8080
# admin.commandURL=/commands
# admin.requireClientAuthScheme=sasl # 强制认证
# 查看JMX配置(限制远程访问)
cat$ZK_HOME/conf/zoo.cfg |grep-E"jmx|com.sun.management"
# 查看动态配置(reconfig)安全
cat$ZK_HOME/conf/zoo.cfg |grep-E"reconfigEnabled|dynamicConfigFile"
# 查看SSL/TLS配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"ssl|secureClientPort|clientPortSsl"
# 查看序列化安全(防止反序列化攻击)
cat$ZK_HOME/conf/zoo.cfg |grep-E"jute.maxbuffer|maxBuffer"
# 查看连接限制
cat$ZK_HOME/conf/zoo.cfg |grep-E"maxClientCnxns|maxClientCnxnHost"
# 关键配置:
# maxClientCnxns=60 # 单客户端IP最大连接数
4.2 资源限制与防护
# 查看内存配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"jvm|heap|memory|Xmx|Xms"
cat$ZK_HOME/bin/zkEnv.sh |grep-E"ZK_SERVER_HEAP|ZK_CLIENT_HEAP"
# 查看JVM参数
ps-ef|grep zookeeper |grep-oE"\-Xmx[0-9]+[mg]|\-Xms[0-9]+[mg]"
# 查看会话超时配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"tickTime|initLimit|syncLimit|maxSessionTimeout|minSessionTimeout"
# 关键配置:
# tickTime=2000 # 基本时间单位(毫秒)
# initLimit=10 # 初始同步限制(tickTime倍数)
# syncLimit=5 # 同步限制(tickTime倍数)
# maxSessionTimeout=60000 # 最大会话超时(60秒)
# minSessionTimeout=4000 # 最小会话超时(4秒)
# 查看数据大小限制
cat$ZK_HOME/conf/zoo.cfg |grep-E"jute.maxbuffer|maxClientCnxns"
# 查看节点数量限制(通过配额)
zkCli.sh -server localhost:2181
# listquota /zookeeper
# 查看磁盘使用
df-h /var/lib/zookeeper/
du-sh /var/lib/zookeeper/data/
du-sh /var/lib/zookeeper/logs/
# 查看文件句柄限制
cat /proc/$(pgrep -f"QuorumPeerMain")/limits |grep"Max open files"
ulimit-n
# 查看进程限制
cat /etc/security/limits.conf |grep zookeeper
五、数据安全与加密
5.1 传输加密(SSL/TLS)
# 查看SSL配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"ssl|secureClientPort"
# 关键配置:
# secureClientPort=2182
# serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
# ssl.keyStore.location=/path/to/keystore.jks
# ssl.keyStore.password=password
# ssl.trustStore.location=/path/to/truststore.jks
# ssl.trustStore.password=password
# ssl.clientAuth=need # 需要客户端证书
# 查看证书详情
keytool -list-v-keystore$ZK_HOME/conf/zookeeper.keystore 2>/dev/null |head-20
# 查看证书有效期
keytool -list-v-keystore$ZK_HOME/conf/zookeeper.keystore 2>/dev/null |grep-E"Valid from|until"
# 查看协议版本(应禁用TLSv1.0/1.1)
cat$ZK_HOME/conf/zoo.cfg |grep-E"ssl.protocol|ssl.enabledProtocols"
# 查看密码套件
cat$ZK_HOME/conf/zoo.cfg |grep-E"ssl.ciphersuites|ssl.cipherSuites"
# 查看国密SSL配置(如使用国密版JDK)
cat$ZK_HOME/conf/zoo.cfg |grep-E"gmssl|sm2|sm3|sm4"
5.2 数据存储安全
# 查看数据目录权限
ls-la /var/lib/zookeeper/
ls-la /var/lib/zookeeper/data/
ls-la /var/lib/zookeeper/logs/
# 应设置为:
# drwxr-x--- zookeeper zookeeper
# 查看事务日志权限
ls-la /var/lib/zookeeper/logs/version-2/ |head-5
# 查看快照文件权限
ls-la /var/lib/zookeeper/data/version-2/ |head-5
# 查看数据加密(ZooKeeper 3.5+支持KMS集成)
cat$ZK_HOME/conf/zoo.cfg |grep-E"encryption|kms|key"
# 查看快照加密(企业版或自定义)
cat$ZK_HOME/conf/zoo.cfg |grep-E"snapshot.encryption|data.encryption"
# 查看配置加密(敏感信息)
cat$ZK_HOME/conf/zoo.cfg |grep-E"password|secret"
# 应避免明文存储,使用环境变量或密钥管理系统
# 查看myid文件权限
ls-la /var/lib/zookeeper/data/myid
# 应设置为:-rw-r----- zookeeper zookeeper
六、高可用与灾备
# 查看集群模式
cat$ZK_HOME/conf/zoo.cfg |grep-E"standaloneEnabled|reconfigEnabled"
# 查看集群成员
cat$ZK_HOME/conf/zoo.cfg |grep"^server\."
cat$ZK_HOME/conf/zoo.cfg.dynamic 2>/dev/null
# 查看观察者(Observer)配置
cat$ZK_HOME/conf/zoo.cfg |grep"peerType=observer"
# 查看同步状态
echo"mntr"|nc localhost 21812>/dev/null |grep-E"zk_synced_peers|zk_pending_syncs"
# 查看Leader选举状态
echo"stat"|nc localhost 21812>/dev/null |grep-E"Mode|Leader"
# 查看节点健康状态
zkServer.sh status
# 查看备份配置
cat$ZK_HOME/conf/zoo.cfg |grep-E"autopurge|snapRetainCount"
# 查看手动备份脚本
ls-la /backup/zookeeper/ 2>/dev/null
cat /usr/local/bin/zk-backup.sh 2>/dev/null
# 查看恢复测试记录
cat /var/log/zookeeper/restore-test.log 2>/dev/null
# 查看事务日志备份
ls-la /backup/zookeeper/txn-logs/ 2>/dev/null
# 查看快照备份
ls-la /backup/zookeeper/snapshots/ 2>/dev/null
七、ZooKeeper与大数据生态安全集成
7.1 Kafka安全集成
# 查看Kafka在ZooKeeper中的节点
zkCli.sh -server localhost:2181 -c"ls /brokers/ids"2>/dev/null
zkCli.sh -server localhost:2181 -c"getAcl /brokers"
# 查看Kafka ACL节点
zkCli.sh -server localhost:2181 -c"ls /kafka-acl"2>/dev/null
zkCli.sh -server localhost:2181 -c"getAcl /kafka-acl"
# 查看Kafka配置
zkCli.sh -server localhost:2181 -c"get /config/topics/__consumer_offsets"2>/dev/null
7.2 Hadoop安全集成
# 查看HBase在ZooKeeper中的节点
zkCli.sh -server localhost:2181 -c"ls /hbase"2>/dev/null
zkCli.sh -server localhost:2181 -c"getAcl /hbase"
# 查看HBase配置
zkCli.sh -server localhost:2181 -c"get /hbase/master"2>/dev/null
# 查看YARN在ZooKeeper中的节点
zkCli.sh -server localhost:2181 -c"ls /yarn-leader-election"2>/dev/null
# 查看HDFS HA配置
zkCli.sh -server localhost:2181 -c"ls /hadoop-ha"2>/dev/null
7.3 Flink安全集成
# 查看Flink在ZooKeeper中的节点
zkCli.sh -server localhost:2181 -c"ls /flink"2>/dev/null
zkCli.sh -server localhost:2181 -c"getAcl /flink"
# 查看Flink HA配置
zkCli.sh -server localhost:2181 -c"ls /flink/default"2>/dev/null
八、一键巡检脚本(ZooKeeper)
#!/bin/bash
# Apache ZooKeeper 等保三级一键巡检脚本
# 适用:ZooKeeper 3.5.x / 3.6.x / 3.7.x / 3.8.x / 3.9.x
ZK_HOME=${1:-/opt/zookeeper}
ZK_PORT=${2:-2181}
echo"===== Apache ZooKeeper 等保三级巡检 ====="
echo"巡检时间:$(date)"
echo"主机名:$(hostname)"
echo"ZK_HOME: $ZK_HOME"
echo"ZK_PORT: $ZK_PORT"
echo""
if[!-d"$ZK_HOME"];then
echo"错误:未找到ZooKeeper安装目录 $ZK_HOME"
exit1
fi
echo"===== 1 身份鉴别 ====="
echo"--- 版本信息 ---"
cat${ZK_HOME}/RELEASE 2>/dev/null ||echo"stat"|nc localhost ${ZK_PORT}2>/dev/null |grep"Zookeeper version"
echo"--- 认证配置 ---"
grep-E"authProvider|superUser"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-5
echo"--- JAAS配置 ---"
cat${ZK_HOME}/conf/jaas.conf 2>/dev/null |head-10||echo"未找到JAAS配置"
echo"--- Kerberos配置 ---"
grep"kerberos"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-3
echo"--- 管理员接口 ---"
grep-E"admin|admin.server"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-5
echo""
echo"===== 2 访问控制 ====="
echo"--- ACL检查(需连接ZooKeeper)---"
echo"ruok"|nc localhost ${ZK_PORT}2>/dev/null
if[$?-eq0];then
echo"[信息] ZooKeeper服务可连接,建议手动检查ACL配置"
echo"命令: zkCli.sh -server localhost:${ZK_PORT}"
echo" getAcl /"
else
echo"[警告] 无法连接ZooKeeper服务"
fi
echo"--- 四字命令白名单 ---"
grep"4lw.commands.whitelist"${ZK_HOME}/conf/zoo.cfg 2>/dev/null ||echo"未配置(危险:允许所有四字命令)"
echo"--- 跳过ACL检查 ---"
grep"skipACL"${ZK_HOME}/conf/zoo.cfg 2>/dev/null ||echo"未配置(安全:不跳过ACL)"
echo"--- 网络配置 ---"
grep-E"clientPort|secureClientPort|clientPortAddress"${ZK_HOME}/conf/zoo.cfg 2>/dev/null
echo"--- 连接限制 ---"
grep-E"maxClientCnxns|jute.maxbuffer"${ZK_HOME}/conf/zoo.cfg 2>/dev/null
echo""
echo"===== 3 安全审计 ====="
echo"--- 审计日志配置 ---"
grep"audit"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-3
echo"--- 日志目录 ---"
ls-la${ZK_HOME}/logs/ 2>/dev/null |head-5
ls-la /var/lib/zookeeper/logs/ 2>/dev/null |head-5
echo"--- 审计日志文件 ---"
ls-la${ZK_HOME}/logs/zookeeper_audit.log 2>/dev/null ||echo"未找到审计日志(ZooKeeper 3.6+支持)"
echo"--- 自动清理配置 ---"
grep-E"autopurge|snapRetainCount"${ZK_HOME}/conf/zoo.cfg 2>/dev/null
echo""
echo"===== 4 入侵防范 ====="
echo"--- 四字命令白名单(安全加固)---"
grep"4lw.commands.whitelist"${ZK_HOME}/conf/zoo.cfg 2>/dev/null ||echo"[警告] 未限制四字命令"
echo"--- 管理员接口安全 ---"
grep"admin.requireClientAuthScheme"${ZK_HOME}/conf/zoo.cfg 2>/dev/null ||echo"[建议] 启用管理员接口认证"
echo"--- 会话认证要求 ---"
grep"sessionRequireClientSASLAuth"${ZK_HOME}/conf/zoo.cfg 2>/dev/null ||echo"[建议] 启用强制会话认证"
echo"--- 内存配置 ---"
grep-E"jvm|heap|Xmx|Xms"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-3
ps-ef|grep zookeeper |grep-oE"\-Xmx[0-9]+[mg]|\-Xms[0-9]+[mg]"|head-1
echo"--- 会话超时 ---"
grep-E"tickTime|maxSessionTimeout"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-3
echo""
echo"===== 5 数据安全 ====="
echo"--- SSL配置 ---"
grep-E"ssl|secureClientPort"${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-5
echo"--- 证书配置 ---"
ls-la${ZK_HOME}/conf/*.jks ${ZK_HOME}/conf/*.p12 2>/dev/null |head-3||echo"未找到证书文件"
echo"--- 数据目录权限 ---"
ls-ld /var/lib/zookeeper/ 2>/dev/null ||ls-ld${ZK_HOME}/data/ 2>/dev/null
echo"--- 事务日志权限 ---"
ls-la /var/lib/zookeeper/logs/version-2/ 2>/dev/null |head-3||ls-la${ZK_HOME}/logs/version-2/ 2>/dev/null |head-3
echo"--- myid文件权限 ---"
ls-la /var/lib/zookeeper/data/myid 2>/dev/null ||ls-la${ZK_HOME}/data/myid 2>/dev/null
echo""
echo"===== 6 高可用与灾备 ====="
echo"--- 集群配置 ---"
grep"^server\."${ZK_HOME}/conf/zoo.cfg 2>/dev/null |head-5
echo"--- 集群模式 ---"
grep-E"standaloneEnabled|reconfigEnabled"${ZK_HOME}/conf/zoo.cfg 2>/dev/null
echo"--- 备份目录 ---"
ls /backup/zookeeper/ 2>/dev/null |head-5||echo"未找到标准备份目录"
echo""
echo"===== 通用安全检查 ====="
echo"--- 进程运行用户 ---"
ps-ef|grep-E"QuorumPeerMain|zookeeper"|grep-vgrep|awk'{print $1}'|sort|uniq-c
echo"--- 配置文件权限 ---"
ls-la${ZK_HOME}/conf/zoo.cfg ${ZK_HOME}/conf/jaas.conf 2>/dev/null |awk'{print $1, $3, $4, $9}'
echo"--- 端口监听 ---"
ss -tulnp|grep-E"2181|2182|2888|3888|8080"2>/dev/null |head-5
echo"--- 环境变量检查 ---"
env|grep-E"ZK|ZOOKEEPER|PASSWORD|SECRET"|grep-v"HIST"|awk-F='{print $1}'|head-5
echo""
echo"===== 巡检完成 ====="
echo"重点关注以下高风险项:"
echo"1. 未启用SASL认证(authProvider未配置)"
echo"2. 四字命令未限制(4lw.commands.whitelist未配置)"
echo"3. 允许跳过ACL检查(skipACL=yes)"
echo"4. 未启用审计日志(ZooKeeper 3.6+)"
echo"5. 管理员接口未启用认证(admin.requireClientAuthScheme)"
echo"6. 未强制会话认证(sessionRequireClientSASLAuth)"
echo"7. 数据目录权限过于开放"
echo"8. 未配置SSL/TLS加密传输"
echo"9. 明文存储密码或密钥"
echo"10. 单点部署(无高可用)"
九、高风险项重点核查清单
| 检查项 | 验证命令 | 不合规判定 | 整改建议 |
|---|---|---|---|
| 未启用SASL认证 | grep authProvider zoo.cfg | 未配置 | 配置SASLAuthenticationProvider |
| 四字命令未限制 | grep 4lw.commands.whitelist zoo.cfg | 未配置或* | 限制为srvr,mntr,conf,ruok |
| 允许跳过ACL | grep skipACL zoo.cfg | yes或未注释 | 设置为no或删除 |
| 未启用审计日志 | grep audit.enable zoo.cfg | false或未配置(3.6+) | 启用审计 |
| 管理员接口未认证 | grep admin.requireClientAuthScheme | 未配置或none | 设置为sasl |
| 未强制会话认证 | grep sessionRequireClientSASLAuth | false或未配置 | 设置为true |
| 根节点ACL开放 | getAcl / | world:anyone:cdrwa | 设置为auth或digest |
| 未配置SSL | grep secureClientPort zoo.cfg | 未配置 | 启用SSL并配置证书 |
| 数据目录权限过大 | ls -ld /var/lib/zookeeper/ | 非750或属主非zookeeper | 修改为750 zookeeper:zookeeper |
| 单点部署 | grep "^server\." zoo.cfg | wc -l | <3(生产环境) | 部署3+节点集群 |
十、ZooKeeper与etcd/Consul对比
| 对比项 | Apache ZooKeeper | etcd | Consul |
|---|---|---|---|
| 一致性协议 | ZAB | Raft | Raft |
| 安全认证 | SASL/Digest/SSL | mTLS/Token | mTLS/Token/ACL |
| 访问控制 | ACL | RBAC | ACL/Policy |
| 审计日志 | 3.6+支持 | 支持 | 支持 |
| 传输加密 | SSL/TLS | mTLS | mTLS |
| 数据加密 | 有限 | 支持 | 支持 |
| 云原生支持 | 一般 | 优秀 | 优秀 |
| 等保合规难度 | 中 | 低 | 低 |
| 国密支持 | 需配置 | 需配置 | 需配置 |
十一、等保测评执行要点
1. 关键安全配置检查
# zoo.cfg 生产环境推荐配置
# 认证配置
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
authProvider.2=org.apache.zookeeper.server.auth.DigestAuthenticationProvider
superUser=super:admin
sessionRequireClientSASLAuth=true
# 管理员接口安全
admin.enableServer=true
admin.serverPort=8080
admin.requireClientAuthScheme=sasl
# 四字命令限制
4lw.commands.whitelist=srvr,mntr,conf,ruok
# 网络配置
clientPort=2181
secureClientPort=2182
clientPortAddress=192.168.1.100 # 具体IP
maxClientCnxns=60
# SSL配置
serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
ssl.keyStore.location=/path/to/keystore.jks
ssl.keyStore.password=${keystore_password}
ssl.trustStore.location=/path/to/truststore.jks
ssl.clientAuth=need
# 审计配置(3.6+)
audit.enable=true
# 资源限制
maxSessionTimeout=60000
jute.maxbuffer=4194304
2. JAAS配置示例
// jaas.conf
Server{
org.apache.zookeeper.server.auth.DigestLoginModule required
user_super="super_secret_password"
user_admin="admin_secret_password"
user_kafka="kafka_secret_password"
user_hbase="hbase_secret_password";
};
Client{
org.apache.zookeeper.server.auth.DigestLoginModule required
username="kafka"
password="kafka_secret_password";
};
3. 现场访谈要点
- 是否启用SASL/Digest认证(生产环境必须)
- 是否限制四字命令(防止信息泄露)
- 是否配置ACL保护关键节点
- 是否启用审计日志(3.6+)
- 是否配置SSL/TLS加密传输
- 是否定期备份事务日志和快照
- 是否监控ZooKeeper集群健康状态
4. 版本差异
| 功能项 | ZooKeeper 3.5 | ZooKeeper 3.6 | ZooKeeper 3.7+ |
|---|---|---|---|
| 审计日志 | 不支持 | 支持 | 增强 |
| 动态配置 | 支持 | 增强 | 完善 |
| SSL/TLS | 支持 | 增强 | 完善 |
| 容器支持 | 基础 | 增强 | 完善 |
| 性能优化 | 基础 | 增强 | 完善 |
参考标准:GB/T 22239-2019、GB/T 28448-2019、Apache ZooKeeper Security Documentation
适用版本:ZooKeeper 3.5.x / 3.6.x / 3.7.x / 3.8.x / 3.9.x
验证环境:x86_64 / ARM64 / 国产化芯片(飞腾/鲲鹏/龙芯/海光/兆芯/申威)
声明:来自汪汪虚拟空间,仅代表创作者观点。链接:https://eyangzhen.com/7625.html