当前位置: 首页 > news >正文

Redis 生产环境命令管控规范

目录

  • Redis 生产环境命令管控规范
    • 文档说明
    • 一、禁用/限制的高危命令
      • 1.1 分类及风险说明
      • 1.2 管控方式
        • 1.2.1 永久禁用/重命名(推荐,redis.conf 配置)
        • 1.2.2 动态管控(临时生效,无需重启)
        • 1.2.3 Redis 6.0+ ACL 精细化管控(最优方案)
    • 二、推荐使用的安全命令
      • 2.1 替代类命令(替换高危遍历命令)
      • 2.2 安全操作类推荐命令
    • 三、配套安全管控措施
      • 3.1 基础环境管控
      • 3.2 监控与审计
      • 3.3 业务开发规范
    • 四、管控效果验证
      • 4.1 验证禁用命令
      • 4.2 验证 ACL 权限
      • 4.3 验证替代命令有效性
    • 五、总结
      • 5.1 核心管控要点
      • 5.2 核心原则

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 主线程阻塞的命令,必须禁用或限制使用;
  • 所有可能导致数据丢失/服务中断的命令,仅保留给运维人员(重命名后使用);
  • 业务侧仅开放“基础读写+安全遍历”命令,最小权限原则。
http://www.jsqmd.com/news/107762/

相关文章:

  • 百度网盘免费解析工具终极指南:彻底告别限速烦恼
  • GKD自动化工具:解放双手的终极手机助手 [特殊字符]✨
  • PMOST管防反接功能
  • 黑极光君与面包君的对话11
  • 硬件寄存器映射(位域结构体)
  • MOSFET栅极前面要加一个100Ω电阻
  • 状态机-–-behaviac
  • AI训练能效革命:从45分钟到3分钟的技术演进与行业影响
  • MOS 管栅极的 “充放电控制 + 可靠性
  • 终极免费抽奖神器:Magpie-LuckyDraw全平台部署指南
  • 终极免费解锁付费内容限制:Chrome扩展完整使用指南
  • Grafana MCP集成终极指南:5个快速提升监控效率的技巧
  • 选择监测节点-–-behaviac
  • OBS多平台直播终极指南:从入门到精通的完整方案
  • 5-Nitroindole Amidite,5-硝基吲哚核苷酸酰胺化试剂(5-硝基吲哚 Amidite)
  • 条件执行节点-–-behaviac
  • 哔哩下载姬DownKyi完整教程:从入门到精通的8大核心技巧
  • 5-FAM,单一异构体,5-Carboxyfluorescein, 5-FAM, 单一异构体
  • Langfuse
  • 技术人才职业发展:从工具思维到价值创造的成长阶梯
  • Quasar 705 T Amidite,Quasar 705 T 核苷酸酰胺化试剂,化学特性
  • 百度贴吧用户脚本终极指南:告别繁琐操作,体验贴吧新境界
  • BTQ-2 dT Linker Amidite,BTQ-2 胸腺嘧啶链节核苷酸酰胺化试剂,化学性质
  • 5‘-Thiol Modifier C6 S-S Amidite,5‘-硫醇修饰剂 C6 双硫键核苷酸酰胺化试剂
  • Unity RestClient 终极指南:告别回调地狱的异步网络编程
  • 微服务架构设计 - 分布式锁使用方法论
  • 驱动开发系列74 - GPU中的I2C
  • libgit2跨平台构建终极指南:从源码到生产部署的完整实践
  • 思考与练习之答案与解析(第六章 程序控制结构)
  • 告别腾讯游戏卡顿:sguard_limit资源限制器完整使用指南