Redis 6.0新特性——ACLs

简介

Redis在6版本之前是没有权限的概念的,所以所有连接的客户端都可以对Redis里面的数据进行操作,也可以使用所有高危命令,这样就可能存在Redis直接down掉或者数据被全部清空的情况。

  • 当执行flushall 或者flashdb的时候会清空掉数据库里面的所有数据。
  • 当执行DEBUG SEGFAULT的时候Redis进程会直接down掉。如下图所示:202011221955.png

在Redis 5以及之前的版本为了避免这种情况的出现,可以使用 rename-command将高危命令禁用掉。

rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command SHUTDOWN ""

以上方法虽然可以解决掉高危命令带来的问题,但是只是使用了简单粗暴的方式,没有做的比较细致。

ACL 权限

Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。它的工作方式是,在连接之后,要求客户端进行身份验证,以提供用户名和有效密码:如果身份验证阶段成功,则连接与给定用户关联,并且该用户具有限制。可以对Redis进行配置,以使新连接已过“默认”用户进行身份验证(这是默认配置),因此,配置默认用户具有的能力是,仅向连接提供特定功能子集的功能未明确认证。

为某个用户设置权限可以使用下面命令:

ACL SETUSER test >passwd on allkey +set

setuser...on表示启用此用户,off则是只定义一个不可用(unaccessable)的用户。

>passwd表示给当前用户设置密码,可以通过auth命令进行登录acl控制的用户。

auth test passwd

202011222015.png

+set当前用户拥有执行set命令的权限,与之相反的是 -set表示取消指定用户执行set命令的权限。

切换用户之后只对指定的命令拥有执行权限。

image.png

acl 配置文件

一般情况下,我们使用命令行设置的acl权限只是保存在内存里面,当Redis进程重启之后我们设置的权限就不见了。那我们应该怎么办呢,对于这种情况,官方也想到了,提供了acl的配置文件。在Redis的配置文件(redis.conf)中可以配置acl文件的位置:

aclfile /etc/redis/users.acl

那么acl里面到底保存的是什么呢?其实acl里面保存的就是命令 acl list执行的结果。其中密码的经过加密了的也比较安全。

下图是acl配置文件的样例,是通过执行命令 acl save生成的。

image.png

下图是命令 acl list执行的结果。

image.png

注意

acl 权限不会自动写入到配置文件里面,在生成ACL配置文件的时候一定要注意执行夏明命令进行持久化(需要先配置 aclfile)

acl save



标 题:《Redis 6.0新特性——ACLs
作 者:zeekling
提 示:转载请注明文章转载自个人博客:浪浪山旁那个村

评论

取消