当前位置: 首页 > 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 - 情人节的礼物” 或 “…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...