Redis 安全与 ACL 命令速查手册
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 替代)