Redis 安全与 ACL 命令速查手册

1 min入门

Redis 安全与 ACL 命令速查手册 的完整教学讲解。

认证基础

基本写法:AUTH 密码认证 AUTH <password> | AUTH <username> <password>

-- 旧版单密码认证(Redis 6 之前)
AUTH mypassword

-- ACL 用户认证(Redis 6.0+)
AUTH alice mypassword

-- 配置文件设置密码
# redis.conf
requirepass mypassword

基本写法:配置文件启用 ACL aclfile <路径>

# redis.conf 启用 ACL 文件
aclfile /etc/redis/users.acl

# 默认用户配置
user default on >password ~* +@all

# users.acl 文件示例
user default on nopass ~* +@all
user app_user on >secret123 ~app:* +@read -@write
user admin on >admin_pwd ~* +@all

ACL 用户管理

基本写法:ACL SETUSER 创建用户 ACL SETUSER <用户名> [规则...]

-- 创建用户并设置权限
ACL SETUSER alice on >password123 ~user:* +@read +@hash -@write

-- 规则说明:
-- on/off           启用/禁用用户
-- >password        设置密码
-- <password        删除密码
-- #hash            设置密码哈希(SHA256)
-- ~pattern         允许访问的 key 模式
-- allkeys          允许访问所有 key(等价 ~*)
-- resetkeys        清除 key 模式
-- +command         允许某命令
-- -command         禁止某命令
-- +@category       允许命令类别(read/write/admin/dangerous...)
-- -@category       禁止命令类别
-- allcommands/+@all  允许所有命令
-- nocommands/-@all   禁止所有命令
-- reset            重置所有规则

基本写法:ACL GETUSER 查看用户 ACL GETUSER <用户名>

-- 查看用户详细权限
ACL GETUSER alice
-- 返回:flags, passwords, commands, keys, channels, selectors

-- 查看所有用户名
ACL WHOAMI          -- 当前用户
ACL USERS           -- 所有用户列表

基本写法:ACL DELUSER 删除用户 ACL DELUSER <用户名> [<用户名>...]

-- 删除用户(不能删除 default 用户)
ACL DELUSER alice bob

-- 禁用而非删除(保留用户定义)
ACL SETUSER alice off

命令类别

基本写法:ACL CAT 查看类别 ACL CAT [<类别>]

-- 查看所有命令类别
ACL CAT
-- 返回:keyspace, read, write, set, sortedset, list, hash,
--       string, bitmap, hyperloglog, geo, stream, pubsub,
--       admin, fast, slow, blocking, dangerous, connection...

-- 查看某类别下的命令
ACL CAT read
ACL CAT dangerous

基本写法:常用类别组合 +@read -@write +@dangerous

-- 只读用户
ACL SETUSER reader on >pwd ~* +@read -@write

-- 管理员
ACL SETUSER admin on >pwd ~* +@all

-- 受限用户:只能读 app: 前缀
ACL SETUSER app_read on >pwd ~app:* +@read +@connection

-- 禁止危险命令
ACL SETUSER safe_user on >pwd ~* +@all -@dangerous

Selector 选择器(Redis 7.0+)

基本写法:多组规则组合 ACL SETUSER <用户> (<规则组>)

-- ACL v2 Selector:根规则 + 多个选择器,任一匹配即允许
ACL SETUSER power_user on >pwd \
  (~app:* +@all) \
  (~cache:* +@read)

-- 根规则:对 app:* 有全部权限
-- 选择器1:对 cache:* 只有读权限
-- 执行命令时:根规则或任一 selector 匹配即允许

-- 设置频道权限(Pub/Sub)
ACL SETUSER subscriber on >pwd &channel:*
-- &pattern 限制可订阅频道

ACL 持久化

基本写法:ACL SAVE 保存 ACL SAVE | ACL LOAD

-- 保存当前 ACL 到 aclfile
ACL SAVE

-- 从 aclfile 重新加载
ACL LOAD

-- 注意:ACL 变更后需 ACL SAVE 持久化,否则重启丢失

ACL 日志

基本写法:ACL LOG 审计 ACL LOG [<count>|RESET]

-- 查看被拒绝的命令日志(最近 128 条)
ACL LOG 10

-- 日志字段:reason, context, object, username, age...
-- reason: auth|command|key|channel

-- 清空日志
ACL LOG RESET

TLS 加密连接

基本写法:配置 TLS tls-port <端口>

# redis.conf TLS 配置(Redis 6.0+)
tls-port 6380
port 0                          -- 关闭明文端口

tls-cert-file /etc/redis/redis.crt
tls-key-file /etc/redis/redis.key
tls-ca-cert-file /etc/redis/ca.crt

tls-auth-clients yes            -- 要求客户端证书
tls-auth-clients no             -- 不要求客户端证书
tls-protocols "TLSv1.2 TLSv1.3"

基本写法:客户端 TLS 连接 redis-cli --tls --cert <证书> --key <私钥> --cacert <CA>

# 启用 TLS 连接
redis-cli --tls \
  --cert /etc/redis/client.crt \
  --key /etc/redis/client.key \
  --cacert /etc/redis/ca.crt \
  -h 192.168.1.1 -p 6380

安全加固清单

基本写法:生产安全配置 CONFIG SET <参数> <值>

-- 1. 禁用危险命令
CONFIG SET rename-command FLUSHALL ''
CONFIG SET rename-command FLUSHDB ''
CONFIG SET rename-command CONFIG ''

-- 2. 绑定内网地址(配置文件)
# bind 192.168.1.10 127.0.0.1
# protected-mode yes

-- 3. 设置密码/ACL
# requirepass 或 aclfile

-- 4. 限制最大内存与淘汰策略
CONFIG SET maxmemory 4gb
CONFIG SET maxmemory-policy allkeys-lru

-- 5. 禁用 KEYS(用 SCAN 替代)