Redis安全之ACL模块

一、为什么要学习Redis的ACL功能?

在redis6.0以前只有一个默认用户和一个密码,只要客户端连接上了redis,缓存中的所有数据对所有系统都是公开的,都是可以互相访问的,也可以互相修改,而且许多危险命令权限也同样可以执行,这就会有许多问题,例如:

  1. A系统添加了一个缓存内容被B系统删除了,导致A系统某个流程异常;
  2. A系统添加的数据想允许B系统访问,但不允许B系统修改(如单点登录的token,值可以共享给其他系统,但不允许他们修改);
  3. redis中拥有很多命令不应该对应用程序开放,这些命令开放可能会给redis照成严重问题(例如:config、flushdb、bgsave、shutdown等危险指令)

从上面案例中可以看出低版本的redis会有多严重的问题,并且存在的问题远远不止上面几种情况,因此添加权限配置是很有必要的。

二、ACL安全配置的介绍

Redis ACL是访问控制列表的缩写,它可以实现某些连接在执行的命令访问的密钥方面受到限制。它的工作方式是,在连接后,客户端需要提供用户名和有效密码来进行身份验证。如果身份验证成功,则连接将与给定用户的限制相关联。

在默认配置中,Redis 6(第一个拥有ACL的版本)的工作方式与旧版本的Redis完全相同。每个新连接都能够调用每一个可能的命令并访问每一个密钥,因此ACL功能与旧客户端和应用程序向后兼容。

三、ACL功能模块使用

在Redis6中ACL主要功能包含用户管理、命令权限管理、访问密钥管理三部分,其中用户是最基本的,命令权限和密钥权限都需要基于用户来配置。

3.1. 用户管理

1. 新增用户

acl setuser 用户名 on >密码

on:代表的是启用该用户,相反off则是禁用
>:后面跟的是用户的密码

3.2. 可执行的指定配置

3.2.1. 授权一个明确指令【+】

允许用户执行get指令

acl setuser 用户名 +get

3.2.2. 授权一类指令【+@】

允许用户执行连接一类的指令,具体有哪些类型可以通过acl cat指令查看

acl setuser 用户名 +@connection

3.2.3. 组合使用

允许用户执行所有除了dangerous类型指令和info的指令

acl setuser 用户名 +@all -@dangerous -info

3.3. 允许访问密钥范围【~】

3.3.1. 允许访问固定前缀的密钥

允许访问密钥前缀为fop:的密钥

acl setuser 用户名 ~fop:*

3.3.2. 允许访问所有密钥

acl setuser 用户名 ~*

3.4. 列表查看所有acl配置

acl list

四、ACL配置持久化与加载

4.1. 为什么需要持久化ACL配置?

首先redis中间件经常会发布新版本,小版本一般都是修复一些BUG,而大版本则会出现更多新功能,为了让我们的项目可以安全稳定运行,我们需要定期升级中间件,升级中间件就需要涉及数据迁移,如果ACL规则不持久化到文件,每次升级后都得重新以命令方式添加所有ACL配置是很麻烦的,如果持久化了则只需要简单执行加载命令即可,其次持久化在集群环境中也很好用,集群环境中,我们可以在其中一个实例中添加好ACL规则,然后拷贝到其他实例服务上加载进去就可以了。

4.2. ACL文件路径设置

需要在redis.conf文件中指定acl文件路径

aclfile /opt/redis/users.acl

4.3. 持久化ACL配置

acl save

4.4. 加载ACL配置

acl load

注:如需了解更多关于ACL配置内容,可前往Redis官网ACL文档进行学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值