Redis 访问控制列表(ACL)

Redis ACL

  • 关于 Redis ACL
  • 与旧版本兼容
  • ACL help
  • ACL 配置模式
    • redis.conf 配置模式
    • 外部 ACL File 配置模式
  • ACL 规则
  • 总结

关于 Redis ACL

Redis ACL (访问控制列表) 是 Access Control List 的缩写,它允许某些连接在可以执行的命令和可以访问的密钥方面受到限制。它的工作方式是,在连接后,客户端需要提供 username/用户名 和有效 password/密码 来进行 authenticate/身份验证。如果身份验证成功,则连接将与给定用户和该用户的限制相关联。Redis 可以配置为新连接已经通过 “default” 用户的身份验证(这是默认配置)。配置默认用户的副作用是,可以仅为未明确验证的连接提供特定的功能子集。

与旧版本兼容

在默认配置中,Redis 6.0(第一个拥有 ACL 的版本)的工作方式与旧版本的 Redis 完全相同。每个新连接都能够调用每一个可能的命令并访问每一个密钥,因此 ACL 功能与旧客户端和应用程序向后兼容。此外,使用 requirepass 配置指令配置密码的旧方法仍然可以正常工作。但是,它现在为 “default” 用户设置了一个密码。

  • Redis6.0 之前的版本中,登陆 Redis Server 只需要输入密码(前提配置了 密码/requirepass )即可,不需要输入 username/用户名,而且密码也是明文配置到配置文件中,安全性不高。并且应用连接也使用该密码,导致应用有所有权限处理数据,风险也极高。
  • Redis6.0 有了 ACL 之后,终于解决了这些不安全的因素,可以按照不同的需求设置相关的用户和权限。

Redis ACL 是向后兼容的,即默认情况下用户为 default,使用的是 requirepass 配置的密码。要是不使用ACL 功能,对旧版客户端来说完全一样。Redis Auth可以有 2 种方式进行工作:

# 旧版本的使用方式,默认用户。兼容旧版本 Redis 的支持
AUTH <password>
# 新版本的使用方式,还需要验证用户名
AUTH <username> <password>
--user <username>  验证用户名
--pass <password>  验证密码,是参数 -a 的别名;配合 --user 使用
--askpass          强制用户输入带有 STDIN 掩码的密码

如果还按照老版本进行配置,那么新版的 redis 还是能够直接通过 密码 字符串来连接,以便和旧版本兼容。通过执行命令 ACL LIST 可以看出系统中有一个名称叫 default 的用户。默认情况下只输入 密码 就能通过 default 这个用户来连接 redis-server

127.0.0.1:6379> ACL LIST
1) "user default on #eb1c66c230df28518559872a792755e1bd7558cb35d58ae9c52689b3dc9ef335 ~* &* +@all"

ACL 描述规则说明:

参数规则说明
user用户(关键字)
default默认用户名称,此处可自定义
on是否启用该用户,默认为 off(禁用)
#…用户密码, nopass 表示不需要密码
~*可以访问的key(正则匹配)
+@all授权类型,授权方式说明如下介绍

授权方式说明:

参数说明
+授权用户操作命令权限
-回收用户操作命令权限
+@添加一类命令
-@回收一类命令
allcommands/+@all允许所有命令执行
nocommands/-@all不运行所有命令操作执行

由于 Redis 是高性能的数据库,正常情况下每秒可以接收百万级别的请求,因此我们的 用户/密码 一定要是非常复杂的组合,否则很容易就会被暴利跑字典给破解了。

ACL help

现在开始来说明如何在 Redis 中根据 ACL 来定制需要的用户权限。

首先看 ACLhelp,了解大致的使用方法:ACL help

# 进入 redis 容器
docker container exec -it redis6479 /bin/sh# 连接 redis 服务
redis-cli -c -h 192.168.48.190 -p 6479 -a '123456' --raw# 查看 ACL 帮助信息
192.168.48.190:6479> ACL help
ACL <subcommand> [<arg> [value] [opt] ...]. Subcommands are:
CAT [<category>]List all commands that belong to <category>, or all command categorieswhen no category is specified.
DELUSER <username> [<username> ...]Delete a list of users.
DRYRUN <username> <command> [<arg> ...]Returns whether the user can execute the given command without executing the command.
GETUSER <username>Get the user's details.
GENPASS [<bits>]Generate a secure 256-bit user password. The optional `bits` argument canbe used to specify a different size.
LISTShow users details in config file format.
LOADReload users from the ACL file.
LOG [<count> | RESET]Show the ACL log entries.
SAVESave the current config to the ACL file.
SETUSER <username> <attribute> [<attribute> ...]Create or modify a user with the specified attributes.
USERSList all the registered usernames.
WHOAMIReturn the current connection username.
HELPPrint this help.

ACL help 翻译说明:

  • ACL<子命令>〔<arg>〔value〕〔opt〕…〕。子命令包括:
    CAT [< category > ]
    列出属于 < category > 或所有命令类别的所有命令,当没有指定类别时。

  • DELUSER<用户名>〔<用户名>…〕
    删除用户列表。

  • DRYRUN<用户名><命令>〔<arg>…〕
    返回用户是否可以在不执行给定命令的情况下执行该命令。

  • GEUSER<用户名>
    获取用户的详细信息。

  • GENPASS[]
    生成一个安全的256位用户密码。可选的“bits”参数可以用于指定不同的大小。

  • LIST
    以配置文件格式显示用户详细信息。

  • LOAD
    从 ACL 文件重新加载用户。

  • LOG [< count >|RESET]
    显示ACL日志条目。

  • SAVE
    将当前配置保存到 ACL 文件中。

  • SETUSER<用户名><属性>〔<属性>…〕
    创建或修改具有指定属性的用户。

  • USERS
    列出所有注册的用户名。

  • WHOAMI
    返回当前连接用户名。

  • HELP
    打印此帮助。

ACL 配置模式

ACL存储模式

在介绍 ACLs 之前,我们先开启 ACL 配置。配置 ACL 的方式有两种:

  1. 用户可以直接在 redis.conf 文件中指定(推荐简单用例);
  2. 可以指定外部 ACL 文件(推荐复杂用例);

由于两种方式是相互不兼容的,所以 Redis 会要求你使用其中的一种。在 redis.conf 中指定用户适用于简单的用例。在复杂的环境中,当需要定义多个用户时,建议使用外部 ACL file,扩展性更佳。

redis.conf 配置模式

redis.conf 和外部 ACL file 中使用的格式是完全相同的,所以从一种方式切换到另一种方式的情况,不需要关注 ACL 命令格式的变化,如下所示:

user <username> ... acl rules ...

举例:

user worker +@list +@connection ~jobs:* on >efa7303c493aa09

注意:两种配置方式,对于存储新用户配置所使用的命令有所不同。

  • redis.conf 方式:使用 CONFIG REWRITE 来通过重写文件来存储新的用户配置。
  • ACL file 方式:使用 ACL SAVE 来通过重写文件来存储新的用户配置。

外部 ACL File 配置模式

  1. 如果之前使用了 redis.conf 模式,redis.conf 中会有之前已经生效的 DSL,我们需要注释掉。例如:
#user default on nopass ~* &* +@all
  1. 可能我们的 redis.conf 文件中还会有 requirepass 配置,当我们开启 ACL 之后,requirepass 将不在生效,这里我们也注释掉,当然如果不注释也不会有影响:
#requirepass default123
  1. config 文件中配置 aclfile 的路径,需要在 redis.conf 中添加:
# Using an external ACL file
#
# Instead of configuring users here in this file, it is possible to use
# a stand-alone file just listing users. The two methods cannot be mixed:
# if you configure users here and at the same time you activate the external
# ACL file, the server will refuse to start.
#
# The format of the external ACL user file is exactly the same as the
# format that is used inside redis.conf to describe users.
#
aclfile /data/redis7/users.acl# 这里需要注意如果是 docker 方式部署,引用的是 docker 容器中的挂载路径
aclfile /home/redis/conf/users.acl

注意:对应的 users.acl 文件要先建立好,不然重启 redis 时会报错。

创建 users.acl 文件并授权,执行如下命令:

touch /home/redis/conf/users.acl && chmod -R 777 /home/redis/conf/
  1. 重启 redis 即生效。(配置完成之后,default 用户属于无密码状态)

说明:

  • ACL 命令行 中设置的用户权限,不能持久化,redis 重启后就失效了。
  • 开启外部 aclfile 之后,不能使用 redis-cli -a xxx 登陆,必须使用 redis-cli --user xxx --pass yyy 来登陆。
  • aclfile 中的命令配置全部正确才会生效,反之会使用缓存上一次成功的信息。

关于 redis.conf 配置,请查看相关文档:

  • Redis Configuractionhttps://redis.io/docs/management/config/
  • Redis v7.2.0 的 redis.conf 详细配置信息https://raw.githubusercontent.com/redis/redis/7.2/redis.conf
  • Redis 集群配置文件 redis.conf 解析https://blog.csdn.net/qq_39677803/article/details/116239553

ACL 规则

关于 ACL 的规则列表,请自行查看官方文档:

  • Redis ACLhttps://redis.io/docs/management/security/acl/#acl-rules
  • Redis Configure-aclshttps://docs.redis.com/latest/rc/security/access-control/data-access-control/configure-acls/

相关博文推荐:

  • Redis Cluster 7.0 用户管理与 ACLs 权限控制,https://blog.csdn.net/weixin_40147979/article/details/128485222

总结

Redis 是一种高性能的缓存数据库,每秒可处理百万级的请求,如果没有很好的 ACL 控制,很可能会被暴力破解;在生产环境中,这是一种重大的安全影响因素,然而 Redis 6.0 扩展的 Auth 得以弥补这一隐患,助力安全生产。如果是新版本的 redis ≥ 6.0,推荐大家尝试外部 ACL file 方式配置来管理用户访问控制权限。

Redis ACL 用户管理方面,其中 key 的配置因为支持 正则表达式 ,所以还能给出各种不同的表达式,这个正则表达式就推荐更多的小伙伴自行去尝试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/189741.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

goland 远程调试 remote debug

1、远程服务器装好go环境&#xff0c;并设置国内源 linux go安装 参考&#xff1a; 如何在 Debian / Ubuntu 上安装 Go 开发环境 - 知乎 设置国内源 go env -w GOPROXYhttps://goproxy.cn,direct 2、远程服务器安装dlv git clone https://github.com/derekparker/delve.gi…

腾讯云轻量4核8G12M带宽服务器租用价格和S5实例报价

腾讯云4核8G服务器优惠价格表&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;阿腾云atengyun.com分享腾讯云4核8G服务器详细配置、优惠价格及限制条件&…

ER 图是什么

文章目录 前言什么是 ER图ER 图实例简化的 ER 图总结 前言 产品经理在梳理产业业务逻辑的过程中&#xff0c;非常重要的一项工作就是梳理各个业务对象之间的关系。如果涉及对象很对的时候&#xff0c;没有工具支持的话很难处理清楚。今天我们就来介绍一个梳理业务对象关系的工…

【数据结构初阶】单链表(附全部码源)

单链表 1&#xff0c;单链表的概念及结构2&#xff0c;单链表的实现2.1初始化内容&#xff08;所需文件&#xff0c;接口&#xff09;2.2申请结点2.3打印单链表2.4尾插2.5头插2.6尾删2.7头删2.8查找2.9在pos位置之后插入2.10在pos位置前面插入2.11删除pos之后的值2.12删除pos位…

“具有分布式能源资源的多个智能家庭的能源管理的联邦强化学习”文章学习四——基于联邦深度学习的多智能家居能源管理

一、用于家庭能源管理的FRL算法 在本节中&#xff0c;我们将阐述提出的FRL算法&#xff08;算法1&#xff09;&#xff0c;该算法以分布式方式调度多个智能家庭的能量消耗。在提出的FRL框架中&#xff0c;LHEMS和GS相互迭代并有效训练LHEMS的模型。我们考虑了由LHEMS控制的空调…

OpenAI临时CEO变更,Mira Murati接任,Sam Altman被辞退

2个小时前&#xff0c;OpenAI 官网宣布&#xff0c;首席技术官Mira Murati临时接任OpenAI CEO&#xff0c;并辞退了CEO Sam Altman。新闻里董事会对辞退的原因只有一个简单说明&#xff1a; “奥特曼离职之前&#xff0c;董事会进行了审慎审查&#xff0c;得出的结论是&#…

MySQL优化(1):B+树与索引

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 对于60%的程序员而言&a…

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个&#xff1f;不考虑多物体提交。障碍物&#xff0c;尽可能选择状态发生变化的物体。如果没有明显变化的&#xff0c;则考虑周边的物体。车的状态最后趋于减速、停止&#xff0c;时序…

ESP32 MicroPython UART及小车类构造函数实验⑥

ESP32 MicroPython UART及小车类构造函数实验⑥ 1、实验目的2、实验内容3、参考代码4、实验结果 1、实验目的 控制小车动起来 2、实验内容 控制小车的前进、后退、左转、右转。读取小车 使用到的串口构造函数&#xff1a; uartmachine.UART(id,baudrate,rx,tx)uart:返回的构…

python django 小程序商城源码

开发环境&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html vue.js bootstrap 微信小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索商品(可根据…

Elasticsearch:通过摄取管道加上嵌套向量对大型文档进行分块轻松地实现段落搜索

作者&#xff1a;VECTOR SEARCH 向量搜索是一种基于含义而不是精确或不精确的 token 匹配技术来搜索数据的强大方法。 然而&#xff0c;强大的向量搜索的文本嵌入模型只能按几个句子的顺序处理短文本段落&#xff0c;而不是可以处理任意大量文本的基于 BM25 的技术。 现在&…

《网络协议》08. 概念补充

title: 《网络协议》08. 概念补充 date: 2022-10-06 18:33:04 updated: 2023-11-17 10:35:52 categories: 学习记录&#xff1a;网络协议 excerpt: 代理、VPN、CDN、网络爬虫、无线网络、缓存、Cookie & Session、RESTful。 comments: false tags: top_image: /images/back…