文章目录
前言
在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