Redis

适用范围:Redis 5/6/7 单机、主从、哨兵、集群场景。

不适用标识说明:

  • 使用 【不适用】 明确标记现场可判定为不适用的控制点。
  • 判定依据采用 GB/T 28448-2019 的对象边界原则;Redis 作为缓存、会话库或消息缓冲时,部分控制点需要按其是否实际处理个人信息、是否提供独立交互账户体系来判断。

基础信息

核查命令

redis-server --version
redis-cli INFO server
ps -ef | grep redis
find / -name redis.conf 2>/dev/null
  • 备注:确认版本、实例角色、监听地址、端口、配置文件、持久化目录、日志目录和部署模式。
  • 预期证据:版本截图、配置路径截图、实例信息截图、端口截图。
示例输出(节选)
Redis server v=7.2.4 sha=00000000 malloc=jemalloc-5.3.0 bits=64
# Server
redis_version:7.2.4
redis_mode:standalone
os:Linux 4.19.90 x86_64
run_id:5f2a...c81d
ps:redis  1101  redis-server *:6379
/etc/redis/redis.conf

身份鉴别

A. 认证方式

核查命令

redis-cli CONFIG GET requirepass
redis-cli ACL LIST
  • 备注:Redis 6 及以上应重点核查 ACL;旧版本主要看 requirepass 和访问源限制。
  • 预期证据:认证配置截图、ACL 截图、账号台账。
示例输出(节选)
requirepass(CONFIG GET,需认证后执行)
NOAUTH Authentication required.
ACL LIST(节选)
user default on nopass ~* &* +@all
user demo-app on >*** ~demo:* &* +@read +@write -@dangerous

B. 用户与权限账户

核查命令

redis-cli ACL LIST
redis-cli ACL GETUSER default
  • 备注:核查是否存在共享管理员、默认开放 default 用户、长期未清理账户。
  • 预期证据:用户列表截图、访谈记录、制度。
示例输出(节选)
ACL LIST(节选)
user default off #(已禁用 default 明文访问)
user demo-app on *** ~demo:* &* +@read +@write -@dangerous
ACL GETUSER default
flags: off
commands: -@all

C. 口令策略与失败控制

核查命令

grep -n "requirepass\\|masterauth\\|aclfile" redis.conf 2>/dev/null
  • 备注:Redis 原生对口令复杂度和锁定策略支持有限,通常需结合堡垒机、主机控制和网络隔离综合判断。
  • 【不适用】若现场 Redis 仅开放受控内网访问,且不存在面向人工用户的交互式登录界面,则“登录失败锁定/会话超时”可对 Redis 组件判定为部分不适用,只需核查其现有 ACL、口令和网络边界。依据:GB/T 28448-2019 身份鉴别控制点应与对象实际鉴别方式相匹配。
  • 预期证据:配置截图、制度、网络隔离材料。
示例输出(节选)
grep redis.conf
requirepass ********
masterauth ********
aclfile /etc/redis/users.acl
(口令为强口令且经 ACL 文件管理)

D. 会话与远程访问控制

核查命令

redis-cli CONFIG GET timeout
redis-cli CONFIG GET tcp-keepalive
  • 备注:timeout 为 0 表示会话不超时;现场应关注是否仅内网开放以及是否通过 TLS 保护。
  • 预期证据:参数截图、网络策略截图、TLS 配置截图。
示例输出(节选)
timeout 300
tcp-keepalive 300
(空闲连接 300 秒断开,TCP 保活已启用)

访问控制

A. 监听地址与来源限制

核查命令

redis-cli CONFIG GET bind
redis-cli CONFIG GET protected-mode
  • 备注:生产环境不宜对公网或全网段开放;protected-mode yes 仅是基础保护,不能替代正式控制。
  • 预期证据:监听配置截图、网络 ACL 材料。
示例输出(节选)
bind 192.168.10.11 127.0.0.1
protected-mode yes
(仅绑定内网地址与回环,protected-mode 开启)

B. 命令级权限控制

核查命令

redis-cli ACL LIST
  • 备注:重点看是否限制高危命令、是否按用户和命令组进行区分授权。
  • 预期证据:ACL 截图、权限说明。
示例输出(节选)
user default off
user demo-app on *** ~demo:* &* +read +write -@dangerous
user readonly-user on *** ~demo:report:* &* +read
(default 已禁用,业务账户最小授权)

C. 默认用户与未使用功能

核查命令

redis-cli ACL GETUSER default
  • 备注:未使用的默认用户、调试命令和测试实例应停用或限制。
  • 预期证据:默认用户截图、处置说明。
示例输出(节选)
ACL GETUSER default
flags: off
passwords: (隐藏)
commands: -@all
keys: -
channels: -
(default 账户已禁用,符合基线要求)

D. 文件与进程权限

核查命令

ps -o user,pid,cmd -C redis-server
ls -l redis.conf 2>/dev/null
  • 备注:运行用户不宜为 root;配置、数据、日志目录权限应最小化。
  • 预期证据:运行用户截图、权限截图。
示例输出(节选)
USER    PID  COMMAND
redis  1101  redis-server *:6379
-rw-r----- 1 redis redis 63799 /etc/redis/redis.conf
(以 redis 运行用户启动,配置文件权限 640)

安全审计

A. 日志配置

核查命令

redis-cli CONFIG GET logfile
redis-cli CONFIG GET loglevel
  • 备注:若 logfile 为空,需结合系统日志判断;现场要确认是否能记录关键操作和异常。
  • 预期证据:日志路径截图、日志级别截图、系统日志截图。
示例输出(节选)
logfile /var/log/redis/redis-server.log
loglevel notice
ls /var/log/redis
redis-server.log
redis-server.log.1.gz

B. 审计覆盖

核查命令

redis-cli MONITOR
  • 备注:MONITOR 不宜长期开启生产使用,可作为短时现场辅证;长期审计一般依赖代理层、日志平台或主机审计。
  • 预期证据:日志样例、平台材料、访谈记录。
示例输出(节选)
redis-cli MONITOR(节选,观察 60 秒)
1722213601.123456 [0 192.168.1.23:51234] "GET" "demo:user:1001"
1722213603.654321 [0 192.168.1.45:51236] "SET" "demo:token:a1b2" "EX" "300"
(MONITOR 仅临时开启用于核查,核查后关闭;常规审计依赖日志与网络层)

C. 留存与轮转

核查命令

ls /var/log 2>/dev/null
grep -R redis /etc/logrotate* 2>/dev/null
  • 备注:需核实日志留存、轮转和归档策略。
  • 预期证据:轮转配置截图、制度、访谈记录。
示例输出(节选)
ls /var/log | grep redis
redis/
grep redis /etc/logrotate.d/*
/etc/logrotate.d/redis-server:/var/log/redis/*.log {
/etc/logrotate.d/redis-server: weekly rotate 12

D. 平台审计联动

核查命令

journalctl | grep redis | tail -n 50
  • 备注:Redis 现场常需结合主机审计、堡垒机、数据库审计平台代理或日志平台综合判断。
  • 预期证据:平台截图、主机审计截图。
示例输出(节选)
journalctl | grep redis(节选)
Aug 24 09:00:01 host systemd[1]: Started Redis In-Memory Data Store.
Aug 24 09:15:22 host systemd[1]: Reloading Redis.
Aug 24 10:02:41 host sudo: ops : TTY=pts/0 ; COMMAND=/usr/bin/systemctl restart redis

数据完整性

A. 持久化与复制完整性

核查命令

redis-cli INFO persistence
redis-cli INFO replication
  • 备注:核查 RDB/AOF 是否开启、复制状态是否正常、主从是否一致。
  • 预期证据:持久化截图、复制状态截图。
示例输出(节选)
INFO persistence
aof_enabled:1
rdb_last_save_time:1724467200
rdb_last_bgsave_status:ok
INFO replication
role:master
connected_slaves:1
slave0:ip=192.168.10.12,port=6379,state=online

B. 传输完整性

核查命令

redis-cli INFO server | grep tcp_port
redis-cli INFO tls 2>/dev/null
  • 备注:如通过 TLS、代理、专线保护链路,应说明完整性保障方式。
  • 预期证据:TLS 截图、架构说明、网络材料。
示例输出(节选)
tcp_port:6379
INFO tls(未启用 TLS 模块时无输出)
(当前为明文 6379,仅内网可达;TLS 改造列入整改计划)

数据保密性

A. TLS 与加密链路

核查命令

redis-cli INFO tls 2>/dev/null
grep -n "tls-" redis.conf 2>/dev/null
  • 备注:Redis 6+ 可支持 TLS;未启用时需结合内网隔离和前置代理说明。
  • 预期证据:TLS 参数截图、证书截图、网络说明。
示例输出(节选)
tls-port 未配置时 INFO tls 无输出
grep tls- redis.conf
# tls-port 0
# tls-cert-file redis.crt
(TLS 相关项均处于注释状态,记录为整改建议)

B. 敏感配置保护

核查命令

grep -n "requirepass\\|masterauth\\|aclfile" redis.conf 2>/dev/null
  • 备注:明文口令、复制认证口令、ACL 文件权限是重点。
  • 预期证据:脱敏截图、权限截图、密钥管理说明。
示例输出(节选)
grep redis.conf
requirepass ********
masterauth ********
aclfile /etc/redis/users.acl
(口令经 aclfile 与配置文件权限 600 保护,未见明文泄露)

备份恢复

A. 配置与持久化文件备份

核查命令

redis-cli CONFIG GET dir
redis-cli CONFIG GET dbfilename
redis-cli CONFIG GET appendfilename
  • 备注:应覆盖配置文件、RDB/AOF 文件、ACL 文件、哨兵或集群配置。
  • 预期证据:备份目录截图、备份策略。
示例输出(节选)
dir /var/lib/redis
dbfilename dump.rdb
appendfilename appendonly.aof
(持久化目录独立于系统目录,便于备份)

B. 主从与备份策略

核查命令

redis-cli INFO replication
  • 备注:主从不是备份的完全替代,但可作为恢复体系的一部分。
  • 预期证据:主从状态截图、架构说明、访谈记录。
示例输出(节选)
INFO replication
role:slave
master_host:192.168.10.11
master_link_status:up
slave_read_repl_offset:88231004

C. 恢复能力

核查命令

ls 2>/dev/null
  • 备注:现场应有恢复步骤、演练记录或至少明确从 RDB/AOF、主从或快照恢复的方法。
  • 预期证据:恢复手册、演练记录、工单。
示例输出(节选)
dump.rdb  appendonlydir/  users.acl.bak
(数据目录存在 RDB/AOF 及历史备份文件)

剩余信息保护

A. 历史数据与临时文件

核查命令

redis-cli DBSIZE
find / -name "*.rdb" -o -name "*.aof" 2>/dev/null
  • 备注:旧快照、废弃实例数据、测试数据文件应及时清理。
  • 预期证据:目录截图、清理说明。
示例输出(节选)
DBSIZE
152340
find / -name "*.rdb" -o -name "*.aof"
/var/lib/redis/dump.rdb
/var/lib/redis/appendonlydir/appendonly.aof.1.incr.aof
/var/backup/redis/dump-20260823.rdb

B. 凭据残留

核查命令

grep -R "requirepass\\|masterauth\\|password" /etc /opt 2>/dev/null
  • 备注:脚本、配置、历史文件中残留口令应记录并整改。
  • 预期证据:脱敏截图、整改记录。
示例输出(节选)
grep requirepass/masterauth/password /etc /opt(节选)
/opt/app/config/application.yml: password: ***
/etc/redis/users.acl: user demo-app on ***
(应用侧口令经配置中心加密下发,未见明文)

个人信息保护

A. 键值数据中的个人信息

核查命令

redis-cli --scan | head -n 20
  • 备注:现场不宜直接抽取全部业务数据,建议通过键模式和业务访谈判断是否存放个人信息。
  • 【不适用】若 Redis 明确仅用于技术缓存、分布式锁、会话票据或不含个人信息的临时数据,且经业务确认不直接存储个人信息,则该点可判定为不适用。依据:GB/T 28448-2019 个人信息保护控制点以实际处理个人信息为前提。
  • 预期证据:键模式截图、访谈记录、制度。
示例输出(节选)
redis-cli --scan | head
demo:user:1001
demo:order:2026082401
demo:session:a1b2c3
demo:cache:index
(键名不含个人敏感字段命名)

B. 日志与导出控制

核查命令

redis-cli INFO keyspace
  • 备注:如 Redis 作为缓存或会话存储承载个人信息,应核查导出、同步、备份和共享控制。
  • 【不适用】若 Redis 不承载个人信息,且无对外导出或共享个人信息的管理功能,则该点对 Redis 可判定为不适用。依据:GB/T 28448-2019 按对象实际功能边界判定。
  • 预期证据:权限说明、备份说明、个人信息保护访谈记录。
示例输出(节选)
INFO keyspace
db0:keys=152340,expires=76210,avg_ttl=3600000
(键值内容抽查未发现存储身份证号等个人信息明文)

入侵防范

A. 未授权访问与管理端口暴露

核查命令

redis-cli CONFIG GET bind
redis-cli CONFIG GET protected-mode
ss -lntp | grep 6379
  • 备注:重点核查对外暴露、无认证、弱认证和管理端口无边界控制问题。
  • 预期证据:监听截图、配置截图、网络 ACL 材料。
示例输出(节选)
bind 192.168.10.11 127.0.0.1
protected-mode yes
ss 输出:
LISTEN 0 128 192.168.10.11:6379
(未监听 0.0.0.0,仅内网网段可访问)

B. 高危命令与危险能力

核查命令

redis-cli ACL LIST
redis-cli CONFIG GET rename-command
  • 备注:关注高危命令、默认用户权限过大、在线改配置和持久化落盘带来的攻击面。
  • 预期证据:ACL 截图、配置截图、处置说明。
示例输出(节选)
ACL LIST(见上)
rename-command(未配置)
(通过 ACL 禁用危险命令组替代 rename-command,等效控制)

C. 版本与漏洞风险

核查命令

redis-server --version
  • 备注:应确认版本、是否为老旧版本、是否有高危漏洞整改或升级计划。
  • 预期证据:版本截图、补丁或整改记录。
示例输出(节选)
Redis server v=7.2.4 sha=00000000 malloc=jemalloc-5.3.0 bits=64

D. 防护与告警联动

核查命令

journalctl | grep redis | tail -n 50
  • 备注:Redis 入侵防范通常依赖网络边界、主机防护、数据库审计代理或日志平台联动。
  • 预期证据:告警截图、主机防护材料、平台记录。
示例输出(节选)
journalctl | grep redis(节选)
Aug 24 09:00:01 host systemd[1]: Started Redis In-Memory Data Store.
Aug 24 10:21:33 host systemd[1]: Stopping Redis In-Memory Data Store...
(运行日志进入 journald 并由 rsyslog 上送集中日志平台)