redis acl

redis acl

redis 安全访问控制

官网

本文基于redis 6.2.17 版本进行测试验证

使用方式

redis 使用 acl 的配置有2种方式:使用 redis.conf 文件配置,和在 redis.conf 文件中配置 aclfile path 指定外部 aclfile 文件路径

使用 redis.conf 文件配置

首先,打开redis-cli,配置用户访问控制权限,如密码、可执行的命令等

bash 复制代码
# redis-cli中执行命令
## 配置用户信息
acl setuser 用户名 on +@all -eval -evalsha >明文密码

其次,手动将配置写入 redis.conf 文件中,持久化保存

Properties 复制代码
user 用户名 on +@all -eval -evalsha >明文密码

通过 aclfile 指定其他配置文件路径

首先,在redis.conf配置文件中配置 aclfile /x/x/x/users.acl 配置文件,根据需求替换路径

properties 复制代码
aclfile /x/x/x/users.acl

接下来有2种方式使规则生效,任选一种即可

方式1 ,在 redis-cli 中配置规则,最后通过acl save命令将配置写入/x/x/x/users.acl配置文件

bash 复制代码
# redis-cli中执行命令
## 配置用户信息
acl setuser 用户名 on +@all -eval -evalsha >明文密码

## 查看配置
acl list

## 持久化存储
acl save

方式2 ,在/x/x/x/users.acl中写入规则,在redis-cli 执行 acl load命令使配置生效

在/x/x/x/users.acl中添加规则

properties 复制代码
user 用户名 on +@all -eval -evalsha >明文密码

在redis-cli中执行命令

bash 复制代码
# redis-cli中执行命令
acl load

acl配置语法和常用配置项

使用acl list可以查看当前系统中的配置

bash 复制代码
> ACL LIST
1) "user default on nopass ~* &* +@all"

上面acl list 命令的响应信息可以直接写入到配置文件中,下面讲解中有几部分:

  1. user 是一个固定的单词
  2. default 是默认用户信息,如果需要配置其他用户,可使用其他的用户名
  3. on 表示用户启用,可以使用off禁用某个用户,但已经建立的连接不会关闭
  4. nopass 表示没有启用密码控制
    1. 设置密码,可以在命令的最后添加>password,其中>标记后面的事明文的密码,password可以替换成自己需要的密码,如
      user default on ~* &* +@all >123456
  5. ~* 访问每个可能的密钥
  6. &* 访问每个可能的Pub/Sub 通道
  7. +@all 访问所有命令

如果需要禁用某个命令,使用 -命令,如-eval -evalsha表示禁用 eval 和 evalsha 命令

使用技巧

  1. 常用配置

    给出一条常用的命令,每次新增用户权限可直接复制命令,然后根据实际需求进行调整

    redis-cli

    bash 复制代码
        acl setuser 用户名 on ~* &* +@all -eval -evalsha -flushdb -flushall >明文密码

    users.acl文件

    Properties 复制代码
        user 用户名 on ~* &* +@all -eval -evalsha -flushdb -flushall >明文密码
  2. 通过acl list命令的响应内容,快速修改配置

    在 redis-cli 交互式窗口中,使用acl list可以查看redis中目前生效的配置信息,可以复制其响应内容,在命令后使用+xxx -xxx来快速修改对应用户可执行和禁用的命令

    bash 复制代码
    ### 使用 acl list,查看响应内容
    127.0.0.1:6379> acl list
    1) "user alice on #8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414 &* +@all"
    2) "user default on sanitize-payload #8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 ~* &* +@all"
    ### 复制第一条,在前方增加acl set,并在后方增加 -flushdb -flushall
    127.0.0.1:6379>acl setuser alice on #8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414 &* +@all
    OK
  3. acl list 中显示的是加密后的密码,如果项目要求不允许在配置文件中出现明文密码,可以将acl list中的内容复制到配置文件中

  4. 不建议使用命令重命名的方式(rename-command),如果需要恢复权限很不方便

  5. 使用acl配置,则可以不使用和redis默认的requirepass

  6. 在redis.conf中,直接配置user xxxx和指定aclfile xxxx.acl,两种方式只能二选一

相关推荐
IT大白鼠3 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙3 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除3 天前
redis--018
redis
两锭子3 天前
Redis基础
redis
烟沙九洲3 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索3 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞3 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路4 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog4 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis