Redis 生产环境命令管控规范

Redis 生产环境命令管控规范

文档说明

本文档旨在明确 Redis 生产环境中禁用/限制的高危命令推荐使用的安全命令,核心目标是保障 Redis 实例的稳定性、数据安全性和服务可用性,适用于 Redis 5.0+ 版本(Redis 6.0+ 新增 ACL 管控能力)。

一、禁用/限制的高危命令

1.1 分类及风险说明

命令分类具体命令风险等级核心风险
全量遍历阻塞类KEYS极高遍历所有键,时间复杂度 O(N),数据量大时阻塞主线程,导致所有请求超时
HKEYS极高遍历哈希所有字段,大哈希(字段数 10 万+)场景下阻塞主线程
HGETALL极高遍历哈希所有字段+值,阻塞风险同 HKEYS,且返回数据量更大
SMEMBERS极高遍历集合所有元素,大集合场景下阻塞主线程
LRANGE 0 -1极高全量遍历列表,大列表场景下阻塞主线程
数据清空类FLUSHDB极高清空当前数据库,误执行直接丢失整库数据
FLUSHALL极高清空所有数据库,生产环境执行等同于“删库”
配置/调试类CONFIG可修改 Redis 配置(密码、持久化策略等),存在配置篡改/泄露风险
DEBUG调试命令(如 DEBUG SEGFAULT)可导致 Redis 进程崩溃
MODULE加载/卸载外部模块,存在代码注入风险
服务操作类SHUTDOWN直接关闭 Redis 实例,导致服务中断
SYNC/PSYNC手动触发主从复制,可能导致主库压力陡增
持久化干扰类BGREWRITEAOF/BGSAVE手动触发持久化,高并发时加剧服务器 IO 压力
认证/握手类HELLO(6.0+)未管控时可被用于密码爆破、获取 Redis 版本/协议信息
批量删除类DEL(批量)如 DEL * 误执行会批量丢失数据(单键 DEL 可保留)

1.2 管控方式

1.2.1 永久禁用/重命名(推荐,redis.conf 配置)

编辑 Redis 配置文件(如 /etc/redis/redis.conf),通过 rename-command 禁用或重命名高危命令,修改后需重启 Redis 生效。

# 1. 直接禁用(设为空字符串,彻底禁止执行)
rename-command KEYS ""
rename-command HKEYS ""
rename-command HGETALL ""
rename-command SMEMBERS ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command SHUTDOWN ""
rename-command MODULE ""

# 2. 重命名(仅运维人员知晓,用于紧急运维)
rename-command CONFIG "XXXX_CONFIG_2025"       # 自定义复杂名称
rename-command BGREWRITEAOF "XXXX_BGREWRITEAOF_2025"
rename-command HELLO "XXXX_HELLO_2025"        # Redis 6.0+ 需重命名
1.2.2 动态管控(临时生效,无需重启)

适用于无法重启 Redis 的场景,通过 CONFIG SET 实时修改,需执行 CONFIG REWRITE 保存到配置文件避免重启后失效。

# 禁用 HKEYS 命令
127.0.0.1:6379> CONFIG SET rename-command HKEYS ""
# 重命名 CONFIG 命令
127.0.0.1:6379> CONFIG SET rename-command CONFIG "XXXX_CONFIG_2025"
# 保存配置到磁盘
127.0.0.1:6379> CONFIG REWRITE
1.2.3 Redis 6.0+ ACL 精细化管控(最优方案)

通过 ACL 实现“按用户管控”,运维用户保留权限、业务用户禁用高危命令,兼顾安全性和运维便利性。

# 1. 创建业务用户:仅允许基础读写,禁用所有高危命令
127.0.0.1:6379> ACL SETUSER appuser ON >AppPass@2025 ~* +@read +@write -@admin -KEYS -HKEYS -HGETALL -FLUSHDB -FLUSHALL -HELLO

# 2. 创建运维用户:保留所有命令权限
127.0.0.1:6379> ACL SETUSER admin ON >AdminPass@2025 ~* +@all

# 3. 保存 ACL 规则到文件(永久生效)
127.0.0.1:6379> ACL SAVE

二、推荐使用的安全命令

2.1 替代类命令(替换高危遍历命令)

禁用命令推荐替代命令核心优势使用示例
KEYSSCAN迭代遍历,非阻塞,分批返回SCAN 0 MATCH user:* COUNT 10(遍历以 user: 开头的键,每次返回 10 条)
HKEYSHSCAN迭代遍历哈希字段,非阻塞HSCAN user:1001 0 COUNT 10(遍历哈希 user:1001 的字段,每次返回 10 条)
HGETALLHSCAN迭代遍历哈希字段+值,非阻塞HSCAN order:8888 0 COUNT 20(遍历订单哈希的所有字段和值)
SMEMBERSSSCAN迭代遍历集合元素,非阻塞SSCAN goods:hot 0 COUNT 15(遍历热门商品集合,每次返回 15 条)
LRANGE 0 -1LRANGE start end指定范围遍历,避免全量阻塞LRANGE msg:1001 0 99(仅获取列表前 100 条数据)

2.2 安全操作类推荐命令

命令场景推荐命令安全说明
单键删除DEL(单键)/UNLINKUNLINK 为异步删除,推荐用于大键删除,避免阻塞;禁止批量 DEL *
数据查询GET/HGET/SMEMBERS(小集合)仅允许查询小体量数据(集合元素 < 1000),大集合必须用 SSCAN
持久化自动触发(配置)禁用手动 BGSAVE/BGREWRITEAOF,通过 redis.conf 配置自动触发策略
配置查看运维专用重命名 CONFIG仅运维人员通过重命名后的 CONFIG 命令查看配置,业务侧禁止访问
认证AUTH(6.0-)/HELLO(6.0+)HELLO 仅允许运维用户使用,业务侧通过 AUTH 完成基础认证

三、配套安全管控措施

3.1 基础环境管控

  1. 禁止外网访问:修改 redis.confbind 127.0.0.1(仅允许本机访问),或通过防火墙(iptables/ufw)限制访问 IP。
  2. 设置强密码:配置 requirepass 避免未授权访问,密码需包含大小写字母+数字+特殊字符:
    requirepass Redis@Pass2025!
    
  3. 禁用保护模式例外:Redis 保护模式(protected-mode yes)仅允许本机访问,生产环境禁止关闭。

3.2 监控与审计

  1. 慢查询日志:配置慢查询捕获阻塞命令,及时告警:
    slowlog-log-slower-than 1000  # 记录执行时间 > 1ms 的命令
    slowlog-max-len 1000          # 保留 1000 条慢查询日志
    
    查看慢查询:SLOWLOG GET 10(查看最近 10 条)。
  2. 命令审计:Redis 6.0+ 开启 ACL 日志,记录命令执行情况:
    acllog-max-len 1000
    
    查看审计日志:ACLLOG LIST

3.3 业务开发规范

  1. 强制使用“迭代遍历命令”(SCAN/HSCAN/SSCAN)替代全量遍历命令;
  2. 限制单个数据结构大小:哈希字段数 ≤ 1 万、集合元素数 ≤ 1 万、列表长度 ≤ 10 万;
  3. 禁止业务代码中调用 CONFIG/DEBUG/SHUTDOWN 等运维命令。

四、管控效果验证

4.1 验证禁用命令

执行被禁用的命令,应返回错误提示:

127.0.0.1:6379> KEYS *
(error) ERR unknown command `KEYS`, with args beginning with:

4.2 验证 ACL 权限

业务用户执行高危命令应被拒绝:

127.0.0.1:6379> AUTH appuser AppPass@2025
OK
127.0.0.1:6379> HKEYS user:1001
(error) NOPERM this user has no permissions to run the 'HKEYS' command or its subcommand

4.3 验证替代命令有效性

127.0.0.1:6379> HSCAN user:1001 0 COUNT 5
1) "0"
2) 1) "name"
   2) "zhangsan"
   3) "age"
   4) "30"
   5) "email"
   6) "zhangsan@example.com"

五、总结

5.1 核心管控要点

  1. 必禁用命令:KEYS、HKEYS、HGETALL、SMEMBERS、FLUSHDB、FLUSHALL,需通过 rename-command 彻底禁用;
  2. 推荐替代命令:SCAN/HSCAN/SSCAN 迭代遍历命令,是生产环境唯一允许的遍历方式;
  3. 精细化管控:Redis 6.0+ 优先使用 ACL 按用户管控命令权限,区分运维/业务用户。

5.2 核心原则

  • 所有可能导致 Redis 主线程阻塞的命令,必须禁用或限制使用;
  • 所有可能导致数据丢失/服务中断的命令,仅保留给运维人员(重命名后使用);
  • 业务侧仅开放“基础读写+安全遍历”命令,最小权限原则。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值