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,两种方式只能二选一

相关推荐
Narutolxy10 小时前
MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418
redis·mysql·docker
sinat_2622921110 小时前
Java面试实战:谢飞机的求职记 - Spring Boot、Redis与微服务技术问答解析
java·spring boot·redis·微服务·分布式事务
盖世英雄酱5813611 小时前
同事说缓存都用redis啊,数据不会丢失!真的吗?
redis·后端·面试
techdashen11 小时前
性能比拼: Redis vs Dragonfly
数据库·redis·缓存
_Djhhh12 小时前
【Redis】缓存三剑客问题实践(上)
数据库·redis·缓存
蜗牛031414 小时前
Redis在SpringBoot中的使用
java·spring boot·redis
一个小坑货14 小时前
Docker 部署 Redis 缓存服务
redis·缓存·docker
码熔burning16 小时前
Redis分片集群
数据库·redis·分片集群
小五Z16 小时前
Redis--主从复制
数据库·redis·分布式·后端·缓存
马达加斯加D17 小时前
缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透
数据库·redis·缓存