Redis 访问控制列表(ACL)

news2024/11/17 12:37:40

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 categories
    when 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 can
    be used to specify a different size.
LIST
    Show users details in config file format.
LOAD
    Reload users from the ACL file.
LOG [<count> | RESET]
    Show the ACL log entries.
SAVE
    Save the current config to the ACL file.
SETUSER <username> <attribute> [<attribute> ...]
    Create or modify a user with the specified attributes.
USERS
    List all the registered usernames.
WHOAMI
    Return the current connection username.
HELP
    Print 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.coloradmin.cn/o/1222504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP1.0协议详解

前言主要特点存在的不足与HTTP1.1的区别在Java中应用HTTP1.0协议知识拓展 前言 HTTP是由蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;爵士创造的。他在1989年提出了一个构想&#xff0c;借助多文档之间相互关联形成的超文本&#xff08;HyperText&#xff09;&#x…

SQL Server如何建表

一、数据表的组成 实现完整性的约束有&#xff1a; –6个约束 –非空 not null –主键 primary key –唯一 unique –检查 check –默认 default –主键自增 identity 表约束 主键约束&#xff1a;值不能为null,且不能重复 非空约束&#xff1a;不能为null 默认约束&#xf…

6. hdfs的命令操作

简介 本文主要介绍hdfs通过命令行操作文件 操作文件有几种方式&#xff0c;看个人习惯 hdfs dfs hdfs fs hadoop fs个人习惯使用 hadoop fs 可操作任何对象&#xff0c;命令基本上跟linux命令一样 Usage [hadoophadoop01 ~]$ hadoop fs Usage: hadoop fs [generic option…

C++初级项目-webserver(1)

1.引言 Web服务器是一个基于Linux的简单的服务器程序&#xff0c;其主要功能是接收HTTP请求并发送HTTP响应&#xff0c;从而使客户端能够访问网站上的内容。本项目旨在使用C语言&#xff0c;基于epoll模型实现一个简单的Web服务器。选择epoll模型是为了高效地处理大量并发连接…

CF1899A Game with Integers(思维题)

题目链接 题目 题目大意 t 组测试样例 每组给一个正整数 n&#xff0c; 有两种操作&#xff1a; 1-1 A 和 B 轮流操作&#xff0c; 如果这个整数变成了一个能被3整除的数&#xff0c;A赢&#xff0c;输出First 如果在10次操作以内&#xff0c;n不能被3整数&#xff0c;B赢&…

Windows Server2012 R2修复SSL/TLS漏洞(CVE-2016-2183)

漏洞描述 CVE-2016-2183 是一个TLS加密套件缺陷&#xff0c;存在于OpenSSL库中。该缺陷在于使用了弱随机数生成器&#xff0c;攻击者可以利用此缺陷预测随机数的值&#xff0c;从而成功绕过SSL/TLS连接的加密措施&#xff0c;实现中间人攻击。这个漏洞影响了OpenSSL 1.0.2版本…

jenkins清理缓存命令

def jobName "yi-cloud-operation" //删除的项目名称 def maxNumber 300 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number < maxNumber }.each { it.delet…

python django 小程序点餐源码

开发工具&#xff1a; PyCharm mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 微信小程序 代码注释齐全&#xff0c;没有多余代码&#xff0c;适合学习(毕设)&#xff0c;二次开发&#xff0c;包含论文技术相关文档。 功能介绍&#xff1a…

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

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

ER 图是什么

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

数据结构与集合源码

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷F

1、常见的加密算法可以分为对称加密算法和非对称加密算法&#xff0c;以下关于它们的描述正确的是 A、AES是一种常见的非对称加密算法 B、凯撒密码是一种非对称加密 C、非对称加密算法的解密使用的秘钥与加密不同 D、对称加密算法无法被暴力破解 答案&#xff1a;C 2、12根…

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

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

C++多态原理揭秘

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

二进制分析工具-radare2使用教程

二进制分析工具-radare2使用教程 按照如下执行命令 按照如下执行命令 r2 -A 二进制文件

我为什么开始写技术博客

今天没有技术文章&#xff0c;只是想聊聊认真做CSDN和公众号以来的一些感想。 1.为什么开启技术分享 我不算是一个聪明的人&#xff0c;没有过目不忘的本事&#xff0c;所以从工作开始就养成了做笔记的习惯&#xff1b; 最开始15、16年做模型开发&#xff0c;那时候环境其实就…

*ST富吉-688272 三季报分析(20231117)

*ST富吉-688272 基本情况 公司名称&#xff1a;北京富吉瑞光电科技股份有限公司 A股简称&#xff1a;*ST富吉 成立日期&#xff1a;2011-01-20 上市日期&#xff1a;2021-10-18 所属行业&#xff1a;计算机、通信和其他电子设备制造业 周期性&#xff1a;1 主营业务&#xff1a…

23111702[含文档+PPT+源码等]计算机毕业设计javaweb高校宿舍管理系统寝室管理

文章目录 **软件开发环境及开发工具&#xff1a;****项目功能介绍&#xff1a;****论文截图&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 软件开发环境及开发工具&#xff…

Excel 文件比较工具 xlCompare 11.01 Crack

比较两个 Excel 文件之间的差异 xlCompare. xlCompare.com 是性能最佳的 Excel diff 工具&#xff0c;用于比较两个 Excel 文件或工作表并在线突出显示差异。xlCompare 包括免费的在线 Excel 和 CSV 文件比较服务以及用于比较和合并 Excel 文件的强大桌面工具。如果您想在线了…

STM32与ZigBee无线通信技术在工业自动化中的应用

工业自动化是指利用电子技术、计算机技术和通信技术等手段&#xff0c;对工厂、设备和生产过程进行自动化控制和管理的过程。在工业自动化中&#xff0c;可靠的无线通信技术对于实时数据的传输和设备的协同控制至关重要。本文将介绍STM32微控制器与ZigBee无线通信技术在工业自动…