文章目录
1.1 简介:
Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。
在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS * , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :
(1)接入权限:用户名和密码
(2)可以执行的命令
(3)可以操作的 KEY
1.2 命令
1、使用acl list命令展现用户权限列表
acl list
2、使用acl cat命令
(1)查看添加权限指令类别
(2)加参数类型名可以查看类型下具体命令
3、使用acl whoami命令查看当前用户
4、使用aclsetuser命令创建和编辑用户ACL
(1)ACL规则
启动或禁用用户
on 启用
off 禁用
启用或禁用命令
+<command> 将 <command> 命令添加到用户可调用的命令列表中
-<command> 从可调用的命令列表中移除 <command> 命令
+@<category> 允许用户调用 <category> 分类中的所有命令(可通过 ACL CAT 命令查看完成分类列表)
-@<category> 禁止用户调用 <category> 分类中的所有命令
+<command>|subcommand 允许使用原本禁用的特定类别下的特定子命令
+@all 允许调用所有命令,与使用 allcommands 效果相同。包括当前存在的命令以及将来通过模块加载的命令
-@all 禁止调用所有命令
允许或禁止访问某些 KEY
~<pattern> 添加符合条件的模式。如: ~* 允许所有 KEY,使用 ~* 与 allkeys 效果相同
resetkeys 使用当前模式覆盖所有允许的模式。如: ~foo:* ~bar:* resetkeys ~objects:* ,最终客户端只允许访问匹配 ~object:* 模式的 KEY
为用户配置有效密码
><password> 将密码添加到用户有效密码列表中。例如:>mypass 将会把 mypass 添加到用户的密码列表中。该操作会清除用户的 nopass 标记。每个用户可由拥有多个有效密码
<<password> 将密码从用户有效密码列表中移除。列表中不存在改密码时,会报错。
#<hash> 将此 SHA-256 哈希值添加到用户的有效密码列表中。该哈希值将与 ACL 用户输入的密码的哈希值进行比较。这将允许用户将此哈希值存储在 acl 配置文件中,而不是存储明文密码。仅接受 SHA-256 哈希值,因为密码的哈希必须由 64 个字符长度的小写的十六进制字符组成。
!<hash> 从有效密码列表中删除该哈希值。(适用于不知道哈希值指定的密码但又想从用户中删除密码的情况)
nopass 删除用户所有密码,并将该用户标记为不需要密码。如果此指令引用于 default 用户,则每个新的连接都将立即通过 default 用户进行连接,而无需任何显示的 AUTH 命令。
resetpass 清除用户可用密码列表的数据,并清除 nopass 状态。之后该用户将没有任何关联的有效密码,将不允许登录,直到为该用户设置了有效密码或将用户设置成 nopass 状态
reset 重置用户到初始状态。该命令会执行以下操作:resetpass,resetkeys,off,-@ all。
(2)通过命令创建新用户默认权限
acl setuser user1
没有指定任何规则。如果用户不存在,这将使用just created的默认属性来创建用户。如果用户已经存在,则上面的命令将不执行任何操作。
(3)设置有用户名、密码、ACL权限、并启用的用户
acl setuser user1 on >password ~cached:* +get
(4)切换用户,验证权限