Redis 生产环境命令管控规范

目录

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

ini 复制代码
# 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 保存到配置文件避免重启后失效。

redis 复制代码
# 禁用 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 实现"按用户管控",运维用户保留权限、业务用户禁用高危命令,兼顾安全性和运维便利性。

redis 复制代码
# 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 替代类命令(替换高危遍历命令)

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

2.2 安全操作类推荐命令

命令场景 推荐命令 安全说明
单键删除 DEL(单键)/UNLINK UNLINK 为异步删除,推荐用于大键删除,避免阻塞;禁止批量 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 避免未授权访问,密码需包含大小写字母+数字+特殊字符:

    ini 复制代码
    requirepass Redis@Pass2025!
  3. 禁用保护模式例外:Redis 保护模式(protected-mode yes)仅允许本机访问,生产环境禁止关闭。

3.2 监控与审计

  1. 慢查询日志 :配置慢查询捕获阻塞命令,及时告警:

    ini 复制代码
    slowlog-log-slower-than 1000  # 记录执行时间 > 1ms 的命令
    slowlog-max-len 1000          # 保留 1000 条慢查询日志

    查看慢查询:SLOWLOG GET 10(查看最近 10 条)。

  2. 命令审计 :Redis 6.0+ 开启 ACL 日志,记录命令执行情况:

    ini 复制代码
    acllog-max-len 1000

    查看审计日志:ACLLOG LIST

3.3 业务开发规范

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

四、管控效果验证

4.1 验证禁用命令

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

redis 复制代码
127.0.0.1:6379> KEYS *
(error) ERR unknown command `KEYS`, with args beginning with:

4.2 验证 ACL 权限

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

redis 复制代码
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 验证替代命令有效性

redis 复制代码
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 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev7 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1237 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器7 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天7 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
桌面运维家8 小时前
如何用半缓存云桌面将服务器硬盘容量扩展至本地终端?
运维·服务器·缓存
南墙上的石头8 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画9 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc10 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t10 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb