ACL--Access Control List的简称,是为了控制某些redis客户端在访问redis服务器时,能够执行的命令和能够获取到的键。在客户端连接的时候,会被要求输入有效的用户名和密码,如果验证成功,则该客户端拥有输入用户名的相关操作权限。redis可以被配置成新连接都指向default user,默认拥有default user的权限。
在redis 6当中,这东西默认配置跟之前的版本一致——每一个新建连接能够执行所有命令,也能够访问所有的key。
AUTH 命令从之前的 `AUTH `扩展到支持`AUTH `,在没有提供username 参数的时候,默认是default 用户。
ACL通过DSL(Domain Specific Language)来描述一个给定用户的权限,顺序是从第一个到最后一个,从左到右,顺序很重要,默认情况如下:
点击(此处)折叠或打开
-
> ACL LIST
- 1) "user default on nopass ~* +@all"
ACL 规则
启用或者禁用用户:
- on:可以使用该用户进行授权
- off:进制用户,不能使用该用户进行授权,但是已经授权的链接仍然可以工作,如果default user是off的话,新建连接将不进行授权,并且需要显式的要求用户发送AUTH或者带有AUTH选项的HELLO命令来进行验证,
允许和禁止命令:
- +: 用户可以使用该命令
- -:用户不可以使用该命令
- +@: 用户可以使用所有属于该category下的命令,类似@admin, @set, @sortedset...全称见ACL CAT命令
- -@: 同上相反
- +|subcommand: 允许特定子命令,否则不允许。这条规则没有对应的-规则,只能使用+规则,如果command已经全部激活了(+这种),会报错,而且subcommand只可以添加,不能移除
- allcommands:+@all的别名
- nocommands:-all的别名
允许和不允许指定键:
1. ACL 命令以及ACL SETUSER子命令
2. 修改服务器配置,重启服务器,或者当时用外部ACL文件的时候,ACL LOAD
ACL有两种生效方式,redis.conf文件和外部文件,二者不兼容,当使用外部文件时,需要在配置文件中指定:
当时用redis.conf文件作为配置的时候,可以使用`CONFIG REWRITE`命令将配置重写;而如果用外部的ACL文件,就可以动态加载和保存`ACL LOAD` `ACL SAVE`
对哨兵和副本需要允许指定命令才能正常工作,
哨兵不需要访问key,所以其允许的命令如下:
副本需要允许如下命令:
副本当中的master将默认拥有任何命令的权限,在replica当中,master相当于拥有root权限
注意:
当添加或移除categories, modules的命令会被忽略(+@all除外)
- ~: 添加指定模式的键
- allkeys: ~*的别名
- resetkeys:充电之前允许的所有的key的pattern,后面的仍旧生效,如:~foo:* ~bar:* resetkeys ~objects:*,将会导致指定客户端访问objects:*格式的key
为指定用户配置相关密码
重置用户- >: 为当前用户添加有效密码,每个用户可以配置任意数量的密码,如果有一个,则nopass就会失效
- <: 从用户有效密码列表中删除密码,如果没有,会返回错误
- #: 将这个SHA-256的哈希值添加的用户的有效密码,避免了明文存储密码
- !: 移除哈希值
- nopass: 没有密码,所有新建连接都不用验证
- resetpass:将所有允许的密码都冲掉,包括nopass,所以,在这之后,如果不添加密码的话,没有办法进行授权
- reset:等同于resetpass, resetkeys, off, -@all。用户状态回到创建之初
1. ACL 命令以及ACL SETUSER子命令
2. 修改服务器配置,重启服务器,或者当时用外部ACL文件的时候,ACL LOAD
点击(此处)折叠或打开
-
> ACL SETUSER alice
- ACL SETUSER alice on >p1pp0 ~cached:* +get
点击(此处)折叠或打开
- aclfile xxxxx
对哨兵和副本需要允许指定命令才能正常工作,
哨兵不需要访问key,所以其允许的命令如下:
点击(此处)折叠或打开
-
AUTH, CLIENT, SUBSCRIBE, SCRIPT, PUBLISH, PING, INFO, MULTI, SLAVEOF, CONFIG, CLIENT, EXEC.
-
- >ACL setuser sentinel-user >somepassword +client +subscribe +publish +ping +info +multi +slaveof +config +client +exec on
点击(此处)折叠或打开
-
PSYNC, REPLCONF, PING
- > ACL setuser replica-user >somepassword +psync +replconf +ping on
副本当中的master将默认拥有任何命令的权限,在replica当中,master相当于拥有root权限
注意:
当添加或移除categories, modules的命令会被忽略(+@all除外)