文章目录
前言
在Redis 5版本之前,Redis 安全规则只有依赖于密码控制以及通过rename 调整高危命令
如:
(1)禁用高危命令

修改redis配置文件redis.conf 添加
rename-command FLUSHALL ""
rename-command FLUSHDB ""

重启redis服务发现flushdb和flushall被禁用

(2)重命名高危命令
修改redis配置文件redis.conf 添加
rename-command FLUSHALL "fall"
rename-command FLUSHDB "fdb"

重启redis服务发现flushdb和flushall被禁用,新的命令为fdb和fall

1.1 简介:
ACL,即Access Control List(访问控制列表),允许系统设置用户可执行的命令和可访问的键,用于限制用户权限。Redis 6 提供ACL的功能对用户进行更细粒度的权限控制 :

官方文档说明
1.2 命令
1.2.1 acl list命令展现用户权限列表
acl list

1.2.2 acl cat命令查看添加权限指令类别

加类型名可查看类型下具体命令

1.2.3 acl whoami 命令查看当前用户

1.2.4 acl setuser命令创建和编辑用户
acl setuser [rule [rule ...]]
(1)ACL 参数规则
启动或禁用用户
on 启用
off 禁用
启用或禁用命令
+<command> 将 <command> 命令添加到用户可调用的命令列表中
-<command> 从可调用的命令列表中移除 <command> 命令
+@<category> 允许用户调用 <category> 分类中的所有命令(可通过 ACL CAT 命令查看)
-@<category> 禁止用户调用 <category> 分类中的所有命令
+<command>|subcommand 允许使用原本禁用的特定类别下的特定子命令
+@all 允许调用所有命令
-@all 禁止调用所有命令
允许或禁止访问某些 KEY
~<pattern> 添加符合条件的模式。如:~* 允许访问所有 KEY
resetkeys 使用当前模式覆盖所有允许的模式。如:resetkeys ~objects:* ,最终客户端只允许访问匹配 ~object:* 模式的 KEY
为用户配置有效密码
><password> 将密码添加到用户有效密码列表中。例如:>123456 将会把 123456 添加到用户的密码列表中。该操作会清除用户的 nopass 标记。
<<password> 将密码从用户有效密码列表中移除。
nopass 删除用户所有密码,并将该用户标记为不需要密码。
(2) 通过命令创建新用户默认权限
acl setuser user1
没有指定任何规则

(3)设置有用户名、密码、ACL权限、并启用的用户
创建一个仅有get操作权限,仅读取cached:开头,密码为password的用户
acl setuser user1 on >password ~cached:* +get

(4)切换用户,验证权限

1.3 基于外部aclfile模式
1.3.1 开启alcfile,修改配置文件(不能同时设置requirepass)
在redis.conf添加
aclfile /myredis/users.acl

启动redis报错:
Error loading ACLs, opening file '/myredis/users.acl': No such file or directory
创建此文件后,启动服务,创建用户

1.3.2 将acl权限持久化到aclfile
ACL SAVE

查看文件users.acl:

1.3.3 acl load 将aclfile中的权限加载至redis服务
修改users.acl文件,添加:
user cz on #5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 ~cached:* &* -@all +get
查看当前users.acl文件:

执行 acl load

本文介绍了Redis从5版本开始引入的ACL功能,详细讲解了如何通过ACL实现更精细的权限控制,包括禁用/重命名高危命令、使用acllist、aclcat、aclwhoami和aclsetuser等命令创建和管理用户,以及如何配置和加载外部aclfile。此外,还讨论了如何在Redis配置中启用和持久化ACL设置。

被折叠的 条评论
为什么被折叠?



