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

news2024/11/23 11:00:27

官网文档地址: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

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

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

相关文章

任务中心全新升级,新增分享接口文档功能,MeterSphere开源持续测试工具v3.4版本发布

2024年11月5日&#xff0c;MeterSphere开源持续测试工具正式发布v3.4版本。 在这一版本中&#xff0c;系统设置方面&#xff0c;任务中心支持实时查看系统即时任务与系统后台任务&#xff1b;接口测试方面&#xff0c;新增接口文档分享功能、接口场景导入导出功能&#xff0c;…

GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息

目录 简介 代码 引用 网址推荐 知识星球 机器学习 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09; 简介 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09;数据库是一个综合数据库&#xff0c;完整覆盖了美国所有地区和岛屿领土的最佳可用土…

3.PyCharm工具

第三方IDE&#xff0c;集成开发工具&#xff0c;官网下载。 社区版本&#xff0c;免费使用。 创建项目

Rust移动开发:Rust在iOS端集成使用介绍

iOS调用Rust 上篇介绍了 Rust移动开发&#xff1a;Rust在Android端集成使用介绍, 这篇主要看下iOS上如何使用Rust&#xff0c;Rust可以给移动端开发提供跨平台&#xff0c;通用组件支持。 该篇适合对iOS、Rust了解&#xff0c;想知道如何整合调用和编译的&#xff0c;如果想要…

video素材格式转换--mp4转webm(vue3+Nodejs)

总体实现使用ffmpeg 自动化demo实现 vue3Nodejsffmpeg 一、官网下载ffmpeg https://ffmpeg.org/ 1-1选择对应系统下载 1-2下载完成后配置环境变量 1-2-1将下载文件的bin目录配置到环境变量中 例如:D:\ffmpeg\bin 1-3测试ffmpeg是否安装成功 ffmpeg -version 如图 证明安装成…

YOLOPv2论文翻译

YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception 摘要 在过去的十年中&#xff0c;多任务学习方法在解决全景驾驶感知问题方面取得了令人鼓舞的成果&#xff0c;既提供了高精度又具备高效能的性能。在设计用于实时实际自动驾驶系统的网络时&#xff0c;这…

Golang | Leetcode Golang题解之第553题最优除法

题目&#xff1a; 题解&#xff1a; func optimalDivision(nums []int) string {n : len(nums)if n 1 {return strconv.Itoa(nums[0])}if n 2 {return fmt.Sprintf("%d/%d", nums[0], nums[1])}ans : &strings.Builder{}ans.WriteString(fmt.Sprintf("%d…

基于LORA的一主多从监测系统_实物展示

提供&#xff1a;成品硬件 4G模块 详细开发流程 源码 原理图 主节点和子节点A的合照来一张 主节点 子节点A

教程:FFmpeg结合GPU实现720p至4K视频转换

将一个 720p 的视频放大编码到 4K&#xff0c;这样的视频处理在很多业务场景中都会用到。很多视频社交、短视频、视频点播等应用&#xff0c;都会需要通过服务器来处理大量的视频编辑需求。 本文我们会探讨一下做这样的视频处理&#xff0c;最低的 GPU 指标应该是多少。利用开源…

css | padding vs margin

前置知识 height是作用域内容(content)区域的 padding和margin用百分比的时候是怎么算的&#xff1f;父元素的宽度。注意&#xff0c;不是根据父元素相应的属性&#xff0c;就是父亲的width 自身的height是0 以下代码&#xff0c;外面盒子是100x10的&#xff0c;里面的widt…

监控架构- Grafana-监控大屏

1. Grafana极速上手指南 1.1 环境准备 主机ip地址grafana10.0.0.66zabbix_server10.0.0.62 1.2 部署grafana 9.3.6 ##去官网找rpm包下载并上传 ## 安装 yum localinstall -y grafana-9.3.6-1.x86_64.rpm## 启动服务并设置开机自启动 systemctl enable --now grafana-server…

数据分析反馈:提升决策质量的关键指南

内容概要 在当今快节奏的商业环境中&#xff0c;数据分析与反馈已成为提升决策质量的重要工具。数据分析不仅能为企业提供全面的市场洞察&#xff0c;还能帮助管理层深入了解客户需求与行为模式。掌握数据收集的有效策略和工具&#xff0c;企业能够确保获得准确且相关的信息&a…

SpringBoot助力的共享汽车业务优化系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【启程Golang之旅】从零开始构建可扩展的微服务架构

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案

随着视频监控技术的不断发展&#xff0c;NVR&#xff08;网络视频录像机&#xff09;已经成为现代安防系统的重要组成部分。而为了更高效地管理多个品牌的NVR设备&#xff0c;EasyNVR这一多品牌NVR管理工具应运而生。然而&#xff0c;在实际使用过程中&#xff0c;尤其是在多个…

GS-Blur数据集:首个基于3D场景合成的156,209对多样化真实感模糊图像数据集。

2024-10-31&#xff0c;由韩国首尔国立大学的研究团队创建的GS-Blur数据集&#xff0c;通过3D场景重建和相机视角移动合成了多样化的真实感模糊图像&#xff0c;为图像去模糊领域提供了一个大规模、高覆盖度的新工具&#xff0c;显著提升了去模糊算法在真实世界场景中的泛化能力…

一文熟悉新版llama.cpp使用并本地部署LLAMA

0. 简介 最近是快到双十一了再给大家上点干货。去年我们写了一个大模型的系列&#xff0c;经过一年&#xff0c;大模型的发展已经日新月异。这一次我们来看一下使用llama.cpp这个项目&#xff0c;其主要解决的是推理过程中的性能问题。主要有两点优化&#xff1a; llama.cpp …

VMWareTools安装及文件无法拖拽解决方案

文章目录 1 安装VMWare Tools2 安装vmware tools之后还是无法拖拽文件解决方案2.1 确认vmware tools安装2.2 客户机隔离2.3 修改自定义配置文件2.4 安装open-vm-tools-desktop软件 1 安装VMWare Tools 打开虚拟机VMware Workstation&#xff0c;启动Ubuntu系统&#xff0c;菜单…

Maven的依赖管理、传递、冲突、父子工程的继承和聚合

目录 一、基于IDEA 进行Maven依赖管理 (一)依赖管理概念 (二)Maven工程核心信息配置和解读&#xff08;GAVP&#xff09; (三)Maven工程依赖管理配置 1.依赖管理和依赖添加 2.依赖版本统一提取和维护 (四)依赖范围 (五)Maven工程依赖下载失败错误解决&#xff08;重点…

华为云计算知识总结——及案例分享

目录 一、华为云计算基础知识二、华为云计算相关案例实战案例一&#xff1a;搭建弹性云服务器&#xff08;ECS&#xff09;并部署Web应用案例二&#xff1a;构建基于OBS的图片存储和分发系统案例三&#xff1a;基于RDS的高可用数据库应用案例四&#xff1a;使用华为云DDoS防护保…