redis acl
redis 安全访问控制
官网
本文基于redis 6.2.17 版本进行测试验证
使用方式
redis 使用 acl 的配置有2种方式:使用 redis.conf 文件配置,和在 redis.conf 文件中配置 aclfile path
指定外部 aclfile 文件路径
使用 redis.conf 文件配置
首先,打开redis-cli,配置用户访问控制权限,如密码、可执行的命令等
# redis-cli中执行命令
## 配置用户信息
acl setuser 用户名 on +@all -eval -evalsha >明文密码
其次,手动将配置写入 redis.conf 文件中,持久化保存
user 用户名 on +@all -eval -evalsha >明文密码
通过 aclfile 指定其他配置文件路径
首先,在redis.conf
配置文件中配置 aclfile /x/x/x/users.acl
配置文件,根据需求替换路径
aclfile /x/x/x/users.acl
接下来有2种方式使规则生效,任选一种即可
方式1,在 redis-cli
中配置规则,最后通过acl save
命令将配置写入/x/x/x/users.acl
配置文件
# 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
中添加规则
user 用户名 on +@all -eval -evalsha >明文密码
在redis-cli
中执行命令
# redis-cli中执行命令
acl load
acl配置语法和常用配置项
使用acl list
可以查看当前系统中的配置
> ACL LIST
1) "user default on nopass ~* &* +@all"
上面acl list
命令的响应信息可以直接写入到配置文件中,下面讲解中有几部分:
user
是一个固定的单词default
是默认用户信息,如果需要配置其他用户,可使用其他的用户名on
表示用户启用,可以使用off
禁用某个用户,但已经建立的连接不会关闭nopass
表示没有启用密码控制- 设置密码,可以在命令的最后添加
>password
,其中>
标记后面的事明文的密码,password
可以替换成自己需要的密码,如
user default on ~* &* +@all >123456
- 设置密码,可以在命令的最后添加
~*
访问每个可能的密钥&*
访问每个可能的Pub/Sub 通道+@all
访问所有命令
如果需要禁用某个命令,使用 -命令
,如-eval -evalsha
表示禁用 eval 和 evalsha 命令
使用技巧
-
常用配置
给出一条常用的命令,每次新增用户权限可直接复制命令,然后根据实际需求进行调整
redis-cli
acl setuser 用户名 on ~* &* +@all -eval -evalsha -flushdb -flushall >明文密码
users.acl文件
user 用户名 on ~* &* +@all -eval -evalsha -flushdb -flushall >明文密码
-
通过
acl list
命令的响应内容,快速修改配置在
redis-cli
交互式窗口中,使用acl list
可以查看redis中目前生效的配置信息,可以复制其响应内容,在命令后使用+xxx -xxx
来快速修改对应用户可执行和禁用的命令### 使用 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
-
acl list
中显示的是加密后的密码,如果项目要求不允许在配置文件中出现明文密码,可以将acl list
中的内容复制到配置文件中 -
不建议使用命令重命名的方式(
rename-command
),如果需要恢复权限很不方便 -
使用
acl
配置,则可以不使用和redis默认的requirepass
-
在
redis.conf
中,直接配置user xxxx
和指定aclfile xxxx.acl
,两种方式只能二选一