当前位置: 首页 > news >正文

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址:https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/
使用版本:Redis@7.4.1

什么是 ACL?

ACL(Access Control List),权限控制列表,是 Redis 提供的一种对客户端的权限控制方式,它的主要应用场景有:

  • 您希望通过限制对命令和密钥的访问来提高安全性,以便不受信任的客户端没有访问权限,而受信任的客户端仅具有执行所需工作所需的数据库的最低访问级别。例如,某些客户端可能只能执行只读命令。
  • 您希望提高操作安全性,以便不允许访问 Redis 的进程或人员因软件错误或手动错误而损坏数据或配置。例如,从 Redis 获取延迟作业的工作程序无法调用 FLUSHALL 命令。

ACL 入门

通过 ACL LIST 命令,我们来看一下 ACL 大概是个什么东西。
默认情况下,有一个用户定义的用户,称为 default。我们可以使用 ACL LIST 命令来检查当前活动的 ACL 并验证新启动的、默认配置的 Redis 实例的配置:

> ACL LIST
1) "user default on nopass ~* &* +@all"

输出内容的含义是这样的:

  • user default」:user + 用户名
  • on」:该用户是否被启用,也可能为 false
  • nopass」:此用户登录无需密码
  • ~*」:~ 后面的 * 意味着允许用户访问所有键。可以指定更具体的键模式来限制访问,比如 ~prefix:* 只允许访问以 prefix: 开头的键。
  • &*」:表示频道模式权限,& 后面的 * 意味着用户可以订阅所有频道(用于 Pub/Sub)。同样,你可以通过指定具体的模式来限制频道访问,比如 &news:* 只允许用户订阅以 news: 开头的频道。
  • +@all」:用户可以调用所有命令

ACL 常见命令

ACL 提供了一系列的命令去查看、新增、删除用户,以及配置用户的权限,具体来说有这些:

查看用户信息相关命令

ACL GETUSER username:获取特定用户的配置

ACL GETUSER username # 获取某个用户的详细信息

执行案例

> ACL GETUSER default
flags
on
nopass
sanitize-payload
passwords
commands
+@all
keys
~*
channels
&*
selectors

flags
on:用户启用状态,表示该用户当前处于激活状态,可以登录和执行命令。
nopass:无需密码,表示不需要密码就可以登录该用户。
sanitize-payload:用于清理用户输入的命令参数,防止数据注入或恶意内容的传递。
passwords:这里为空,表示当前未设置密码(因为启用了 nopass)。
commands:+@all 表示默认用户有执行所有命令的权限,+@all 是 Redis 内置的命令类别(command category),表示允许所有命令。
keys:~* 表示该用户对所有键都具有访问权限。
channels:&* 表示该用户可以访问所有的 Pub/Sub 频道。
selectors:这是新的 ACL 规则,可以在条件匹配基础上进一步细分权限。显示为空表示没有附加选择器配置。

ACL LIST:获取当前所有用户的配置

ACL LIST # 展示用户列表,并且显示详细权限配置

执行案例

> ACL LIST
user default on nopass sanitize-payload ~* &* +@all

ACL USERS:只展示用户名

ACL USERS # 展示用户名列表

执行案例

> ACL USERS
default

ACL WHOAMI:查看当前登录的用户

> ACL WHOAMI
default

ACL DRYRUN:测试用户是否有执行命令的权限

ACL DRYRUN username command [arg [arg...]] #用户是否有执行命令的权限

比如:

> ACL DRYRUN default keys *
OK

用户创建与修改

用户的创建与修改都是通过下面这条命令来完成的,关于这个命令的使用方式放到后面去详细讲解。

ACL SETUSER username [rule[rule...]]

其他命令

ACL GENPASS:密码生成

ACL GENPASS [bits]

Redis 中的 ACL 还提供了一个密码生成器,后面是比特数,来指定生成密码的安全性等级(即密码的随机性或强度)。它表示生成的密码的位数(bit count)。
如果不指定 bits,Redis 会默认生成一个 256-bit 长度的密码,这通常足够强。
例如:

> ACL GENPASS
b9a79edba8a1d049113c7205c60e3e580ca275be5e75a733e08238d901f43799

ACL 用户配置

上面提到,ACL 是通过 ACL SETUSER [rule [rule...]] 来配置用户的,这里就来看一下有哪些 rule

启动和停用用户

on :可以以此用户身份进行身份验证。
off:禁止该用户:无法再对此用户进行身份验证;但是,以前经过身份验证的连接仍将有效。

配置用户可使用的命令

+<command>:将命令添加到用户可以调用的命令列表中。如果希望达到更加精细的控制,可以与 | 一起使用,以仅允许子命令,例如 +config|get
-<command>:将命令删除到用户可以调用的命令列表中,同样可以使用 |
+@<category>: 添加该类别中所有要由用户调用的命令,有效类别为 @admin、@set、@sortedset…依此类推,通过调用 ACL CAT 命令查看完整列表。其中 @all 表示所有命令,包括当前存在于服务器中的命令,以及将来将通过模块加载的命令。
-@<category>:从客户端可以调用的命令列表中删除命令组。
allcommands:+@all 的别名。请注意,它意味着能够执行通过 modules 系统加载的所有未来命令。
nocommands:-@all 的别名。

控制用户可访问的键

~<pattern>:添加可以作为命令一部分提及的键模式。例如,~* 允许所有键。该模式是 glob 样式的模式,类似于 KEYS 命令的模式。可以指定多个模式。
allkeys~* 的别名。
resetkeys:刷新允许的键模式列表。例如,ACL ~foo:* ~bar:* resetkeys ~objects:* 将仅允许客户端访问与模式 objects:* 匹配的键。

发布与订阅

  • &<pattern>:添加用户可访问的 Pub/Sub 渠道的 glob 样式模式。可以指定多个通道模式。请注意,模式匹配仅对 PUBLISHSUBSCRIBE 提到的通道进行,而 PSUBSCRIBE 要求其通道模式与用户允许的通道模式之间的文本匹配。PSUBSCRIBE 使用的权限匹配是精确的,即 PSUBSCRIBE 的订阅模式必须完全匹配到 ACL 配置中允许的频道模式。例如,如果你在 ACL 中配置了 &news.,那么用户可以使用 PSUBSCRIBE news.sportsPSUBSCRIBE news.weather。但是,如果用户试图订阅更通用的模式(例如 PSUBSCRIBE news.),Redis 会拒绝订阅请求。这种精确匹配有助于提高安全性,使管理员可以更加精细地控制用户对特定频道的访问权限,避免 PSUBSCRIBE 滥用过于宽泛的模式。
  • allchannels&* 的别名,允许用户访问所有 Pub/Sub 渠道。
  • resetchannels:刷新允许的频道模式列表,如果用户的 Pub/Sub 客户端无法再访问各自的频道和/或频道模式,则断开这些客户端的连接。

配置用户登录密码

  • ><password>: 将此密码添加到用户的有效密码列表中。例如,>mypass 会将 “mypass” 添加到有效密码列表中。此指令清除 nopass 标志)。每个用户都可以拥有任意数量的密码。
  • <<password>: 从有效密码列表中删除此密码。如果您尝试删除的密码实际上未设置,则发出错误。
  • #<hash>: 将此 SHA-256 哈希值添加到用户的有效密码列表中。此哈希值将与为 ACL 用户输入的密码的哈希值进行比较。这允许用户在 acl.conf 文件中存储哈希值,而不是存储明文密码。仅接受 SHA-256 哈希值,因为密码哈希必须为 64 个字符,并且仅包含小写十六进制字符。
  • !<hash>: 从有效密码列表中删除此哈希值。当您不知道哈希值指定的密码,但想要删除用户的密码时,这非常有用。
  • nopass:删除用户的所有设置密码,并将用户标记为不需要密码:这意味着每个密码都将对该用户起作用。如果此指令用于 default 用户,则每个新连接将立即使用 default 用户进行身份验证,而无需任何显式的 AUTH 命令。请注意,resetpass 指令将清除此条件。
  • resetpass:刷新允许的密码列表并删除 nopass 状态。在 resetpass 之后,用户没有关联的密码,如果不添加一些密码(或稍后将其设置为 nopass),则无法进行身份验证。

ACL 配置的持久化

Redis 默认情况下不持久化 ACL 配置。除非显式地进行保存,ACL 配置不会自动写入配置文件或持久化存储。这意味着在 Redis 重启后,所有基于 ACL 的用户和权限设置会恢复为默认配置,除非事先保存。
持久化的第一种方式是保存到 redis.conf 文件中,通过 CONFIG REWRITE 指令,在 SECURITY 部分可以找到相关的配置:
![[redisconf 持久化 acl.png|600]]

还有一种方式是使用特定的文件来存储 acl 配置,在客户端执行 ACL SAVE 能够将当前配置的 ACL 保存到文件中,这个文件也需要在 redis.conf 中指定。
![[acl file 位置.png|600]]

需要注意指定的文件 redis 必须有访问的权限,否则会报错,可以通过查看 redis 日志来确定。
通过 ACL SAVE 可以将当前的 ACL 配置保存到文件中,而如果我们已经准备好了一个 ACL 文件,同样可以通过 ACL LOAD 将配置加载到 Redis 中。
这就是关于持久化最重要的两个命令:ACL SAVEACL LOAD

相关文章:

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化

官网文档地址&#xff1a;https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本&#xff1a;Redis7.4.1 什么是 ACL&#xff1f; ACL&#xff08;Access Control List&#xff09;&#xff0c;权限控制列表&#xff0c;是 Redis 提供的一种…...

内网学习一:windows基础

工作组介绍 按照不同的计算机功能或工作部门将计算机列入不同的工作组。要是想访问某一个工作组的资源 只需要双击该部门的工作组&#xff0c;就可以看到该组内的所有计算机。 目的&#xff1a;在大型网络中&#xff0c;方便管理员去管理设备 加入工作组 右击计算机图标---…...

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon

YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化格式&#xff0c;常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读&#xff0c;并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构&#xff1a; Y…...

使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。 在这篇简短的博文中&#xff0c;我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用…...

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统&#xff1a; KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…...

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中&#xff0c;输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin&#xff0c;password100时输出flag 构造反序列化 输入select中&#…...

【c++丨STL】vector模拟实现

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…...

SQLAlchemy 介绍与实践

postgresql 实践 pydantic 实践 1. SQLAlchemy 介绍 SQLAlchemy 是一个 ORM 框架。SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射&#xff08;ORM&#xff09;库。它允许你通过 Python 代码来与关系型数据库交互&#xff0c;而不必直接编写SQL语句。 简单介绍一下…...

docker进行SRS直播服务器搭建

docker进行SRS直播服务器搭建 docker构建参考地址: 地址&#xff1a; https://github.com/ossrs/srs https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \-p 8000:8000/udp -p 10080:10080/udp ossrs/sr…...

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的&#xff0c;但专门设计用于服务器环境&#xff0c;而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…...

数据结构(8.7_2)——败者树

多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结...

设计模式-七个基本原则之一-里氏替换原则

里氏替换原则&#xff08;LSP&#xff09;面向对象六个基本原则之一 子类与父类的替代性&#xff1a;子类应当能够替代父类出现的任何地方&#xff0c;且表现出相同的行为。行为的一致性&#xff1a;子类的行为必须与父类保持一致&#xff0c;包括输入和输出、异常处理等。接口…...

k8s中基于overlay网络和underlay网络的网络插件分别有哪些

在 Kubernetes 中&#xff0c;不同的网络插件会使用 overlay 或 underlay 网络来连接 Pod 和节点。以下是基于 overlay 网络和 underlay 网络的常见 Kubernetes 网络插件&#xff1a; 1. 基于 Overlay 网络的插件 这些插件通过隧道封装技术&#xff08;如 VXLAN、GRE 等&#…...

一文详解java的数据类型

1. 题记 Java是一门对数据类型敏感的语言&#xff0c;本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 2.1 基本数…...

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;...

lua入门教程:math

在Lua中&#xff0c;math库是一个非常重要的内置库&#xff0c;它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算&#xff0c;包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准&#xff0c;我们可…...

ROS2简介与Ubuntu24.04中安装指南

之前安装了一个版本&#xff0c;但是不愿意写blog&#xff0c;现在想想自己就是个沙子立个flag&#xff0c;每次配置项目&#xff0c;写流程blog ROS简介 ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人软件平台&#xff0c;提供了许多工具和库来帮助…...

命令行工具PowerShell使用体验

命令行工具PowerShell使用 PowerShell是微软开发的一种面向对象的命令行Shell和脚本语言环境&#xff0c;它允许用户通过命令行的方式管理操作系统。相较于传统CMD&#xff0c;PowerShell增加了面向对象的程序设计框架&#xff0c;拥有更强大的功能和扩展性。使用PowerShell可…...

MongoDB 详解:深入理解与探索

在当今的数据库领域&#xff0c;MongoDB 以其独特的特性和强大的功能&#xff0c;成为了众多开发者和企业的首选。本文将对 MongoDB 进行详细的介绍&#xff0c;包括其特点、应用场景、流程图以及源码分析。 一、MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系…...

使用 Elasticsearch 构建食谱搜索(一)

作者&#xff1a;来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询&#xff08;例如 “something for Valentines Day - 情人节的礼物” 或 “…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...