Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1678970
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2388
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(184)

文章存档

2021年(26)

2020年(56)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: NOSQL

2021-06-18 17:41:26

翻译文,有些个人觉得冗余的就没翻译,原文链接:

ACL--Access Control List的简称,是为了控制某些redis客户端在访问redis服务器时,能够执行的命令和能够获取到的键。在客户端连接的时候,会被要求输入有效的用户名和密码,如果验证成功,则该客户端拥有输入用户名的相关操作权限。redis可以被配置成新连接都指向default user,默认拥有default user的权限。

在redis 6当中,这东西默认配置跟之前的版本一致——每一个新建连接能够执行所有命令,也能够访问所有的key。
AUTH 命令从之前的 `AUTH `扩展到支持`AUTH   `,在没有提供username 参数的时候,默认是default 用户。

ACL通过DSL(Domain Specific Language)来描述一个给定用户的权限,顺序是从第一个到最后一个,从左到右,顺序很重要,默认情况如下:

点击(此处)折叠或打开

  1. > ACL LIST
  2. 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

点击(此处)折叠或打开

  1. > ACL SETUSER alice
  2. ACL SETUSER alice on >p1pp0 ~cached:* +get
ACL有两种生效方式,redis.conf文件和外部文件,二者不兼容,当使用外部文件时,需要在配置文件中指定:

点击(此处)折叠或打开

  1. aclfile xxxxx
当时用redis.conf文件作为配置的时候,可以使用`CONFIG REWRITE`命令将配置重写;而如果用外部的ACL文件,就可以动态加载和保存`ACL LOAD`  `ACL SAVE`
对哨兵和副本需要允许指定命令才能正常工作,
哨兵不需要访问key,所以其允许的命令如下:

点击(此处)折叠或打开

  1. AUTH, CLIENT, SUBSCRIBE, SCRIPT, PUBLISH, PING, INFO, MULTI, SLAVEOF, CONFIG, CLIENT, EXEC.

  2. >ACL setuser sentinel-user >somepassword +client +subscribe +publish +ping +info +multi +slaveof +config +client +exec on
副本需要允许如下命令:

点击(此处)折叠或打开

  1. PSYNC, REPLCONF, PING
  2. > ACL setuser replica-user >somepassword +psync +replconf +ping on

副本当中的master将默认拥有任何命令的权限,在replica当中,master相当于拥有root权限
注意:
当添加或移除categories, modules的命令会被忽略(+@all除外)
阅读(1033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~