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 样式模式。可以指定多个通道模式。请注意,模式匹配仅对PUBLISH
和SUBSCRIBE
提到的通道进行,而PSUBSCRIBE
要求其通道模式与用户允许的通道模式之间的文本匹配。PSUBSCRIBE 使用的权限匹配是精确的,即PSUBSCRIBE
的订阅模式必须完全匹配到 ACL 配置中允许的频道模式。例如,如果你在 ACL 中配置了 &news.,那么用户可以使用PSUBSCRIBE news.sports
或PSUBSCRIBE 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 部分可以找到相关的配置:
还有一种方式是使用特定的文件来存储 acl 配置,在客户端执行 ACL SAVE
能够将当前配置的 ACL 保存到文件中,这个文件也需要在 redis.conf
中指定。
需要注意指定的文件 redis 必须有访问的权限,否则会报错,可以通过查看 redis 日志来确定。
通过 ACL SAVE
可以将当前的 ACL 配置保存到文件中,而如果我们已经准备好了一个 ACL 文件,同样可以通过 ACL LOAD
将配置加载到 Redis 中。
这就是关于持久化最重要的两个命令:ACL SAVE
和 ACL LOAD
相关文章:

Redis 权限控制(ACL)|ACL 命令详解、ACL 持久化
官网文档地址:https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/ 使用版本:Redis7.4.1 什么是 ACL? ACL(Access Control List),权限控制列表,是 Redis 提供的一种…...

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

编译工具与文件学习(一)-YAML、repos、vcstoolcolcon
YAML YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、数据交换和存储结构化数据。YAML 的设计目标是简洁、易读,并且能够表示复杂的数据结构。 YAML 文件的基本语法 基本结构: Y…...

使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名
作者:来自 Elastic Jeff Vestal 了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。 在这篇简短的博文中,我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用…...

CKA认证 | Day1 k8s核心概念与集群搭建
第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统: KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…...

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

【c++丨STL】vector模拟实现
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C、STL 目录 前言 一、vector底层刨析 二、模拟实现 1. 属性、迭代器以及函数声明 2. 功能实现 交换两个容器的内容 构造函数 拷贝构造 赋值重载 析构…...
SQLAlchemy 介绍与实践
postgresql 实践 pydantic 实践 1. SQLAlchemy 介绍 SQLAlchemy 是一个 ORM 框架。SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射(ORM)库。它允许你通过 Python 代码来与关系型数据库交互,而不必直接编写SQL语句。 简单介绍一下…...
docker进行SRS直播服务器搭建
docker进行SRS直播服务器搭建 docker构建参考地址: 地址: 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操作系统的,但专门设计用于服务器环境,而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…...

数据结构(8.7_2)——败者树
多路平衡归并带来的问题 什么是败者树 败者树的构造 败者树的使用 败者树在多路平衡归并中的应用 败者树的实现思路 总结...
设计模式-七个基本原则之一-里氏替换原则
里氏替换原则(LSP)面向对象六个基本原则之一 子类与父类的替代性:子类应当能够替代父类出现的任何地方,且表现出相同的行为。行为的一致性:子类的行为必须与父类保持一致,包括输入和输出、异常处理等。接口…...
k8s中基于overlay网络和underlay网络的网络插件分别有哪些
在 Kubernetes 中,不同的网络插件会使用 overlay 或 underlay 网络来连接 Pod 和节点。以下是基于 overlay 网络和 underlay 网络的常见 Kubernetes 网络插件: 1. 基于 Overlay 网络的插件 这些插件通过隧道封装技术(如 VXLAN、GRE 等&#…...
一文详解java的数据类型
1. 题记 Java是一门对数据类型敏感的语言,本博文主要总结介绍java语言的数据类型。 2. java的数据类型 Java 的数据类型分为基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 2.1 基本数…...

Flink API 的层次结构
Apache Flink 提供了多层 API,每层 API 针对不同的抽象层次和用途,使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明:...
lua入门教程:math
在Lua中,math库是一个非常重要的内置库,它提供了许多用于数学计算的函数。这些函数可以处理各种数学运算,包括基本的算术运算、三角函数、对数函数、随机数生成等。结合你之前提到的Lua中的数字遵循IEEE 754双精度浮点标准,我们可…...

ROS2简介与Ubuntu24.04中安装指南
之前安装了一个版本,但是不愿意写blog,现在想想自己就是个沙子立个flag,每次配置项目,写流程blog ROS简介 ROS(Robot Operating System)是一个开源的机器人软件平台,提供了许多工具和库来帮助…...

命令行工具PowerShell使用体验
命令行工具PowerShell使用 PowerShell是微软开发的一种面向对象的命令行Shell和脚本语言环境,它允许用户通过命令行的方式管理操作系统。相较于传统CMD,PowerShell增加了面向对象的程序设计框架,拥有更强大的功能和扩展性。使用PowerShell可…...
MongoDB 详解:深入理解与探索
在当今的数据库领域,MongoDB 以其独特的特性和强大的功能,成为了众多开发者和企业的首选。本文将对 MongoDB 进行详细的介绍,包括其特点、应用场景、流程图以及源码分析。 一、MongoDB 概述 MongoDB 是一个基于分布式文件存储的开源数据库系…...

使用 Elasticsearch 构建食谱搜索(一)
作者:来自 Elastic Andre Luiz 了解如何使用 Elasticsearch 构建基于语义搜索的食谱搜索。 简介 许多电子商务网站都希望增强其食谱搜索体验。正确使用语义搜索可以让客户根据更自然的查询(例如 “something for Valentines Day - 情人节的礼物” 或 “…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...