首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis权限管理体系(二):终于等来了Redis权限控制体系ACL

Redis权限管理体系(二):终于等来了Redis权限控制体系ACL

作者头像
俊才
发布于 2023-12-14 04:30:40
发布于 2023-12-14 04:30:40
1.5K00
代码可运行
举报
文章被收录于专栏:数据库干货铺数据库干货铺
运行总次数:0
代码可运行

Redis在存储系统界的使用排名一直遥遥领先,但Redis6版本之前,一直没有一套较为全面的权限控制体系。而随着Redis6版本被更多人使用后,权限控制系统也逐渐广泛应用起来了,本文就探索一下Redis ACL的主要内容。

1. 用户管理

Redis用户的创建、查看、修改、删除等主要操作可以按照如下实例进行

1.1 创建用户

只创建用户,暂时不添加其他权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL SETUSER  user1 on >pwd_u1
OK

另外,上例中,设置的是明文密码,也可以设置加密的hash密码,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#先获取对于密码的hash值
[redis@VM-4-14-centos ~]$ echo -n "pwd_u1" | shasum -a 256
21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544  -

#以密文的方式创建密码
127.0.0.1:6479> ACL SETUSER u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544
OK

1.2 查看用户

Redis中查看用户时可以看到对应的用户信息及权限;另外也可以选择查看全部用户信息、指定用户信息及当前登录的用户是谁。具体示例如下:

列出所有用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user user1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 &* -@all"
127.0.0.1:6479>

查看指定用户:

查看单个用户可以用 "ACL GETUSER 用户名"的方式查看,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL GETUSER user1
 1) "flags"
 2) 1) "on"
    2) "allchannels"
 3) "passwords"
 4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
 5) "commands"
 6) "-@all"
 7) "keys"
 8) (empty array)
 9) "channels"
10) 1) "*"

查看当前登录用户:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL WHOAMI
"default"

1.3 创建多密码

Redis中一个用户可以有多个密码,这是与其他数据库有所不同的地方。示例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL SETUSER u3 on >pwd_u3
OK
127.0.0.1:6479> ACL SETUSER u3 on >pwd_u33
OK
127.0.0.1:6479> ACL GETUSER u3
 1) "flags"
 2) 1) "on"
    2) "allchannels"
 3) "passwords"
 4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
    2) "d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1"
 5) "commands"
 6) "-@all"
 7) "keys"
 8) (empty array)
 9) "channels"
10) 1) "*"

尝试用2个不同的密码登录一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用第一个密码登录
127.0.0.1:6479> AUTH u3 pwd_u3
OK
# 使用第二个密码登录
127.0.0.1:6479> AUTH u3 pwd_u33
OK
# 使用错误密码登录
127.0.0.1:6479> AUTH u3 pwd_u4444
(error) WRONGPASS invalid username-password pair or user is disabled.
127.0.0.1:6479>

可见,2个正确的密码都可以登录这个有个优点在于如果忘记之前的密码,可以在新增一个密码,而不影响原密码的使用。

1.4 删除用户

如需删除指定的用户,可以使用ACL DELUSER命令操作,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 #47843fd456370690f6c7897a73c1e2f0d563981aa3cad13e475bc3e72ca14656 &* -@all"
4) "user u3 on #8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179 #d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1 &* -@all"
5) "user user1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 &* -@all"
127.0.0.1:6479> ACL DELUSER user1
(integer) 1
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 #47843fd456370690f6c7897a73c1e2f0d563981aa3cad13e475bc3e72ca14656 &* -@all"
4) "user u3 on #8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179 #d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1 &* -@all"
127.0.0.1:6479>

1.5 重置用户

可以将用户重置,重置后的用户无法登录,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL SETUSER testuser1 reset
OK
127.0.0.1:6479> ACL GETUSER testuser1
 1) "flags"
 2) 1) "off"
    2) "allchannels"
    3) "sanitize-payload"
 3) "passwords"
 4) (empty array)
 5) "commands"
 6) "-@all"
 7) "keys"
 8) (empty array)
 9) "channels"
10) 1) "*"
127.0.0.1:6479>

2. 权限控制

通过ACL方式添加权限,可以按需添加读写等操作权限,也可以针对对应的规则(如指定类型的key,指定开头的key等)添加权限。

2.1 查看权限

ACL中的操作权限可以通过ACL CAT命令查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL CAT
 1) "keyspace"
 2) "read"
 3) "write"
 4) "set"
 5) "sortedset"
 6) "list"
 7) "hash"
 8) "string"
 9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"

其中每个类型的具体内容可以继续查看,例如查看dangerous操作的具体内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL CAT dangerous
 1) "debug"
 2) "config"
 3) "restore"
 4) "swapdb"
 5) "failover"
 6) "slaveof"
 7) "client"
 8) "migrate"
 9) "latency"
10) "sync"
11) "psync"
12) "lastsave"
13) "acl"
14) "role"
15) "flushdb"
16) "replconf"
17) "info"
18) "keys"
19) "bgsave"
20) "replicaof"
21) "sort"
22) "cluster"
23) "save"
24) "restore-asking"
25) "module"
26) "monitor"
27) "bgrewriteaof"
28) "pfselftest"
29) "pfdebug"
30) "slowlog"
31) "shutdown"
32) "flushall"
127.0.0.1:6479>

2.2 添加权限 之前创建用户u2,仅有登录权限,现在对其添加权限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479>  ACL SETUSER u2 allkeys +@read +@write
OK

以上是对所有key(allkeys,是 ~*的同义词)添加读写权限。加权限就是使用+@对应权限。 下面验证一下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> AUTH u2 pwd_u2
OK
127.0.0.1:6479> set k1  1
OK
127.0.0.1:6479> get k1
"1"
127.0.0.1:6479> info
NOPERM this user has no permissions to run the 'info' command or its subcommand

2.3 回收权限 再对u2用户回收写权限,回收权限使用-@权限即可 ACL SETUSER u2 allkeys -@write

回收后再使用u2用户登录,则可以发现可以查看,但不能写入了

2.4 对指定类型的key进行权限管理

创建u1用户,然后对其添加string及hash类型的key的操作权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL SETUSER u1 on >pwd_u1
OK
127.0.0.1:6479> ACL GETUSER u1
 1) "flags"
 2) 1) "on"
    2) "allchannels"
 3) "passwords"
 4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
 5) "commands"
 6) "-@all"
 7) "keys"
 8) (empty array)
 9) "channels"
10) 1) "*"
127.0.0.1:6479> ACL SETUSER u1 allkeys +@string +@hash
OK
127.0.0.1:6479> ACL GETUSER u1
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
 3) "passwords"
 4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
 5) "commands"
 6) "-@all +@string +@hash"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"
127.0.0.1:6479> 

验证权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL GETUSER u1
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
 3) "passwords"
 4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
 5) "commands"
 6) "-@all +@string +@hash"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"
127.0.0.1:6479> AUTH u1 pwd_u1
OK
127.0.0.1:6479> set s1 1
OK
127.0.0.1:6479> get s1
"1"
127.0.0.1:6479> hset h1 f1 'a'
(integer) 1
127.0.0.1:6479> hgetall h1
1) "f1"
2) "a"
127.0.0.1:6479> info
NOPERM this user has no permissions to run the 'info' command or its subcommand
127.0.0.1:6479> SMEMBERS set1
(error) NOPERM this user has no permissions to run the 'smembers' command or its subcommand

2.5 对指定key进行授权

对指定开头的key添加所有操作权限,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> ACL GETUSER u3
 1) "flags"
 2) 1) "on"
    2) "allchannels"
 3) "passwords"
 4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
 5) "commands"
 6) "-@all"
 7) "keys"
 8) (empty array)
 9) "channels"
10) 1) "*"
127.0.0.1:6479> ACL SETUSER u3 ~a* +@all 
OK
127.0.0.1:6479> ACL GETUSER u3
 1) "flags"
 2) 1) "on"
    2) "allchannels"
    3) "allcommands"
 3) "passwords"
 4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
 5) "commands"
 6) "+@all"
 7) "keys"
 8) 1) "a*"
 9) "channels"
10) 1) "*"
127.0.0.1:6479> 

验证结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1:6479> set s2 222
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6479> set a2 222
OK
127.0.0.1:6479> hset set2 f2 222
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6479> hset aset2 f2 222
(integer) 1
127.0.0.1:6479> 5

3. 结语

通过创建用户及配置相应的权限,可以起到隔离用户操作,避免风险操作等,从而降低Redis被误操作或风险操作的概率,提升安全性及稳定性。大家也可以多多组合测试,配置适合自己使用的权限组合。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis权限管理体系(三): ACL 配置持久化
但因默认配置中ACL的配置未持久化,因此Redis重启后对应的用户(default用户除外)将丢失,因此建议开启ACL配置的持久化。而ACL的持久化有两种方式,以下分别演示。
俊才
2023/12/19
5270
Redis权限管理体系(三): ACL 配置持久化
Redis权限管理体系(一):客户端名及用户名
在Redis6之前的版本中,因安全认证的主要方式是使用Redis实例的密码进行基础控制,而无法按照不同的应用来源配置不同账号以及更细粒度的操作权限控制来管理。本文先从client list中的信息入手,逐步了解Redis的客户端名设置、用户设置及权限控制管理。
俊才
2023/12/11
1.4K0
Redis权限管理体系(一):客户端名及用户名
Redis安全 | 权限设置
到V6.0版本为止, Redis的安全设置共有两种方式, 一种是通过requirepass设置密码, 第二种是通过ACL进行更精确的安全设置.
一个架构师
2022/06/27
5K0
Redis 6.0 新特性概览
Redis 6 RC2 于今年3月5号Release,预计今年4.30月份发布GA版本,官方网站提供 unstable 版本的供大家测试,本文基于官方文档介绍Redis 6的重要的新特性。
用户1278550
2020/03/26
2.8K0
Redis 高可用集群原理和实践
Redis 集群是 Redis 提供的分布式数据库方案,集群痛殴分片(sharding)来进行数据共享,并提供复制和故障转移能力。
PHP开发工程师
2022/05/31
4000
Redis 高可用集群原理和实践
Zookeeper权限管理与Quota管理
Zookeeper的ACL机制和Quota机制网上资料较少,这里做一个总结,以供大家参考。 1 Zookeeper ACL ZooKeeper的权限管理亦即ACL控制功能通过Server、Client两端协调完成: Server端: 一个ZooKeeper的节点(znode)存储两部分内容:数据和状态,状态中包含ACL信息。创建一个znode会产生一个ACL列表,列表中每个ACL包括: l 验证模式(scheme) l 具体内容(Id)(当scheme=“digest”时,Id为用户名密码,例如“root:
三丰SanFeng
2018/01/16
1.4K0
Zookeeper权限管理与Quota管理
备战CKA每日一题——第11天 | 权限控制怎么做?
获取到cka-1202-sa这个Service Account绑定的secret并base64 -d解码token字段:
我的小碗汤
2019/12/10
1.1K0
redis cluster(3)- redis集群管理:伸缩,故障
Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真正存在的。正常工作的时候,Redis Cluster中的每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,这是可以由用户指定的,也可以在初始化的时候自动生成(redis-trib.rb脚本)。这里值得一提的是,在Redis Cluster中,只有Master才拥有槽的所有权,如果是某个Master的slave,这个slave只负责槽的使用,但是没有所有权。
黄规速
2022/04/14
7560
redis cluster(3)- redis集群管理:伸缩,故障
zookeeper权限acl与四字命令
如果设置了权限后,再次进行设置,就可以不用加上用户名和密码了。而且就算是使用其他用户进行设置,也只会根据第一次设置的用户来进行配置:
端碗吹水
2020/09/23
1.2K0
zookeeper权限acl与四字命令
ZooKeeper ACL权限控制机制
ZooKeeper 的 ACL 权限控制和 Unix/Linux 操作系统的ACL有一些区别,我们可以从三个方面来理解 ACL 机制,分别是:权限模式(Scheme)、授权对象(ID)和权限(Permission),通常使用 scheme:id:perm 来标识一个有效的ACL信息。
smartsi
2019/11/26
3.2K0
学习docker看此文足以
Docker 最初是 dotCloud 公司创始人  在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 ,主要项目代码在  上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 。
小陈运维
2021/11/22
4960
kubernete编排技术六:RBAC权限控制
这是kubernete编排技术的第六篇,本文主要讲一下RBAC。之前讲过,kubernete所有API对象,都保存在etcd里。要访问和操作这些对象,一定会通过apiserver,因为apiserver可以做授权工作。
jinjunzhu
2020/08/21
6490
别拿陈旧的恶意软件不当威胁
攻击者通常都要保持恶意软件与攻击技术在最新,但不要因此认为陈旧的恶意软件就会销声匿迹。研究人员在近期就发现了使用 MyDoom 蠕虫的攻击行动。MyDoom(也被称为 Novarg 与 Mimail)在 2004 年被首次发现,距今已经接近二十年了。 钓鱼邮件 典型的 MyDoom 钓鱼邮件通常以邮件退回为主题,电子邮件头会标明退回的原因与自定义的 Content-Type。邮件通常会携带一个附件,有时是压缩的,但也可以不压缩。 钓鱼邮件 被发现的相关恶意邮件标题如下所示: 邮件的恶意附件名如下所示:
FB客服
2023/03/29
5410
别拿陈旧的恶意软件不当威胁
基础平台项目之RBAC权限管理设计
计划在Team的Github开源项目里加入权限控制的业务功能。从而实现权限控制。在很多管理系统里都是有权限管理这些通用模块的,当然在企业项目里,权限控制是很繁杂的。 Team的Github开源项目链接:https://github.com/u014427391/jeeplatform
SmileNicky
2022/05/07
1.4K0
基础平台项目之RBAC权限管理设计
谈谈域渗透中常见的可滥用权限及其应用场景(一)
在域环境中,如果安装Exchange后,系统会添加一个名为Microsoft Exchange Security Groups、Exchange Trusted Subsystem和Exchange Windows Permission三个组。如果获得了这三个组内任意用户的控制权限,就能够继承用户组的WriteDACL权限,WriteDACL权限可以修改域对象的ACL,最终实现利用DCSync导出域内所有用户hash,实现权限提升的目的。
FB客服
2023/02/10
1.4K0
谈谈域渗透中常见的可滥用权限及其应用场景(一)
TryHackMe-Enterprise
IPC$共享有读的权限,可利用impacket中的lookupsid脚本枚举有效的域用户
MssnHarvey
2022/12/31
7450
TryHackMe-Enterprise
5分钟带你掌握Docker全部命令
用户1107783
2023/07/31
3310
5分钟带你掌握Docker全部命令
CMS指纹字典大全[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
4.8K0
Docker空间优化指南:高效回收磁盘空间的实用技巧
Docker不会对你的系统进行配置更改,但它会占用大量的磁盘空间。使用它一小段时间,你可能会震惊地看到一些可怕的使用统计数据。先看看使用前后的数据大小
Tinywan
2024/04/28
8770
Docker空间优化指南:高效回收磁盘空间的实用技巧
详解日渐活跃的勒索软件组织:BianLian
研究人员一直在持续跟踪 BianLian 勒索软件团伙,近期该组织已经跻身最活跃的勒索软件团伙 TOP 10。从披露的数据来看,该组织主要针对美国和欧洲的医疗行业和制造业发起攻击。
FB客服
2024/02/26
2620
详解日渐活跃的勒索软件组织:BianLian
相关推荐
Redis权限管理体系(三): ACL 配置持久化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验