翻译文,有些个人觉得冗余的就没翻译,原文链接:
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"
用户`default` 被配置成活跃的(on), 没有密码,所有的key(~*), 所有的命令(+@all)
ACL 规则
启用或者禁用用户:
-
on:可以使用该用户进行授权
-
off:进制用户,不能使用该用户进行授权,但是已经授权的链接仍然可以工作,如果default user是off的话,新建连接将不进行授权,并且需要显式的要求用户发送AUTH或者带有AUTH选项的HELLO命令来进行验证,
允许和禁止命令:
-
+: 用户可以使用该命令
-
-:用户不可以使用该命令
-
+@: 用户可以使用所有属于该category下的命令,类似@admin, @set, @sortedset...全称见ACL CAT命令
-
-@: 同上相反
-
+|subcommand: 允许特定子命令,否则不允许。这条规则没有对应的-规则,只能使用+规则,如果command已经全部激活了(+这种),会报错,而且subcommand只可以添加,不能移除
-
allcommands:+@all的别名
-
nocommands:-all的别名
允许和不允许指定键:
-
~: 添加指定模式的键
-
allkeys: ~*的别名
-
resetkeys:充电之前允许的所有的key的pattern,后面的仍旧生效,如:~foo:* ~bar:* resetkeys ~objects:*,将会导致指定客户端访问objects:*格式的key
为指定用户配置相关密码
-
>: 为当前用户添加有效密码,每个用户可以配置任意数量的密码,如果有一个,则nopass就会失效
-
<: 从用户有效密码列表中删除密码,如果没有,会返回错误
-
#: 将这个SHA-256的哈希值添加的用户的有效密码,避免了明文存储密码
-
!: 移除哈希值
-
nopass: 没有密码,所有新建连接都不用验证
-
resetpass:将所有允许的密码都冲掉,包括nopass,所以,在这之后,如果不添加密码的话,没有办法进行授权
重置用户
-
reset:等同于resetpass, resetkeys, off, -@all。用户状态回到创建之初
用户可以通过两种渠道进行修改相关ACL
1. ACL 命令以及ACL SETUSER子命令
2. 修改服务器配置,重启服务器,或者当时用外部ACL文件的时候,ACL LOAD
-
> ACL SETUSER alice
-
ACL SETUSER alice on >p1pp0 ~cached:* +get
ACL有两种生效方式,redis.conf文件和外部文件,二者不兼容,当使用外部文件时,需要在配置文件中指定:
当时用redis.conf文件作为配置的时候,可以使用`CONFIG REWRITE`命令将配置重写;而如果用外部的ACL文件,就可以动态加载和保存`ACL LOAD` `ACL SAVE`
对哨兵和副本需要允许指定命令才能正常工作,
哨兵不需要访问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除外)
阅读(2714) | 评论(0) | 转发(0) |