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"