redis用户权限管理

[TOC]

利用 acl 设置用户权限

redis 在6.0之前没有用户权限的概念,只有一个连接认证密码,一旦通过了认证就可以随意操作任意的redis数据,无法对用户权限进行精确控制,很容易因为用户权限过大引发误操作。如果想禁用某些不安全的命令,比如 flushdb、flushall,只能通过 rename-command 的方式来避免

redis 6.0 发布了 权限管理功能 ACL(access control list 访问控制列表),可以对不同的用户设置不同的权限,限制用户可使用的命令或key

查看用户权限

  • redis 默认有一个default的用户,如下所示
[root@localhost ~]# /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -h 127.0.0.1 -p 6379
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"

127.0.0.1:6379> acl setuser tuser
OK

127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user tuser off &* -@all"

127.0.0.1:6379> acl users
1) "default"
2) "tuser"
关键词 关键词含义 详细介绍
default 用户名 兼容以前的AUTH命令
on/off 用户状态 on表示该账号已启用,off代表禁用
nopass 是否有密码 nopass表示该用户没有密码
~* 权限范围 表示可访问全部的数据Key(正则匹配)
+@all 用户的权限 "+"添加权限,"-"删减权限,+@all 表示拥有所有命令集合的所有权限
xxx xxx xxx
  • 查看acl所有命令/集合指令
127.0.0.1:6379> acl cat
127.0.0.1:6379> acl cat string

管理用户

  • 创建用户(不指定则默认为禁用状态)、设置密码、启用用户
#.依次设置
acl setuser tuser
acl setuser tuser >Admin_147
acl setuser tuser on

#.一步到位
acl setuser tuser on >Admin_147
  • 查看当前登录的用户
acl whoami
  • 启用/禁用/删除用户
acl setuser tuser on
acl setuser tuser off
acl deluser tuser

设置用户的权限

  • 添加权限
acl setuser tuser on >Admin_147 ~* -@all +@read +@write     #.限制tuser用户对所有key仅有读写权限
acl setuser tbusr on >Admin_147 ~tb:*                       #.限制tbusr用户只对tb:开头的key有权限
  • 登录测试
127.0.0.1:6379> acl whoami
"default"
127.0.0.1:6379> auth tuser Admin_147
OK
127.0.0.1:6379> set dba jason
OK
127.0.0.1:6379> get dba
"jason"
127.0.0.1:6379> acl whoami
(error) NOPERM this user has no permissions to run the 'acl|whoami' command
  • 取消权限
acl setuser tuser on allkeys -set
  • 获取指定用户的详细权限信息
acl getuser tuser

持久化 acl 配置

持久化 ACL 相关权限设置并保存到文件,分为3个步骤:

  • 第1步,在 redis 配置文件中,设置要导出的acl配置文件绝对路径,注意 acl 配置文件名必须以 .acl 结尾,示例如下:
[root@localhost ~]# touch /data/redis_6379/users.acl
[root@localhost ~]# cat /data/redis_6379/redis_6379.conf | grep aclfile || echo "aclfile /data/redis_6379/users.acl" >> /data/redis_6379/redis_6379.conf
  • 第2步,重启 redis 服务
[root@localhost ~]# /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -h 127.0.0.1 -p 6379 shutdown
[root@localhost ~]# sudo -u redis /usr/local/bin/redis-server /data/redis_6379/redis_6379.conf
  • 第3步,执行 acl save
[root@localhost ~]# /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -h 127.0.0.1 -p 6379
127.0.0.1:6379> acl save
  • 查看 acl 配置文件内容,并测试 acl load 从配置文件中读取 acl 配置
[root@localhost ~]# cat /data/redis_6379/users.acl 
user default on nopass ~* &* +@all
user tuser off &* -@all

[root@localhost ~]# /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -h 127.0.0.1 -p 6379
127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"
2) "user tuser off &* -@all"

127.0.0.1:6379> acl deluser tuser
(integer) 1

127.0.0.1:6379> acl list
1) "user default on nopass ~* &* +@all"

127.0.0.1:6379> acl load
OK

127.0.0.1:6379> acl list
1) "user default on nopass sanitize-payload ~* &* +@all"
2) "user tuser off &* -@all"
Copyright © www.sqlfans.cn 2023 All Right Reserved更新时间: 2024-09-05 21:50:29

results matching ""

    No results matching ""