centos8平台:举例讲解redis6的ACL功能(redis6.0.1)⼀,为什么redis6要增加acl功能模块?
什么是acl?
访问控制列表(ACL)是⼀种基于包过滤的访问控制技术,
它可以根据设定的条件对接⼝上的数据包进⾏过滤,允许其通过或丢弃
redis6增加了acl功能模块后,极⼤的提⾼了redis的安全性,
使redis更适⽤于企业级的业务场景
说明:作者:刘宏缔邮箱: 371125307@qq
⼆,linux平台redis6的安装:
请参见这⼀篇:
wwwblogs/architectforest/p/12830056.html
三,查看redis6中acl的帮助
1,acl的命令列表
[root@centos8 bin]# ./redis-cli
127.0.0.1:6379> acl help
1) ACL <subcommand> arg arg ... arg. Subcommands are:
2) LOAD                            -- Reload users from the ACL file.
3) SAVE                            -- Save the current config to the ACL file.
4) LIST                            -- Show user details in config file format.
5) USERS                            -- List all the registered usernames.
6) SETUSER <username> [attribs ...] -- Create or modify a user.
7) GETUSER <username>              -- Get the user details.
8) DELUSER <username> [...]        -- Delete a list of users.
9) CAT                              -- List available categories.
10) CAT <category>                  -- List commands inside category.
11) GENPASS [<bits>]                -- Generate a secure user password.
12) WHOAMI                          -- Return the current connection username.
13) LOG [<count> | RESET]            -- Show the ACL log entries.
以上各个命令的说明:
LOAD:从acl⽂件加载规则(说明:此⽂件在f中有定义)
SAVE:保存规则到acl⽂件
LIST                  列出所有的acl规则
USERS              列出所有的⽤户
SETUSER          设置/创建⼀个⽤户
GETUSER          查看⼀个⽤户
DELUSER            删除⼀个⽤户
CAT                      查看所有的命令分类
CAT <category>    列出⼀个命令分类下的命令
GENPASS  ⽣成密码
WHOAMI    查看当前⽤户
LOG    ⽇志操作
2,acl命令的参数:密码
>pwd  添加密码列表
<pwd  移除密码列表
nopass 移除当前⽤户的密码
3,acl命令的参数: command
+<command> 添加命令
-<command> 移除命令
+@<category> 添加⼀个命令分类
-@<category> 移除⼀个命令分类allcommands 所有命令可⽤别名 +@all nocommands 所有命令不可⽤别名 -@all
说明:关于命令分类
所有命令分类可以⽤ acl cat 查看
命令分类下的命令可以⽤ acl cat <category>查看
4,acl命令的参数: key
~<pattern>
~* 所有key
allkeys 别名 ~*
四,redis6的acl使⽤例⼦:
1,列出当前的acl规则:
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
acl的字段说明:
user  :⽤户
default  :默认⽤户(反之为⾃⼰创建的⽤户)on        :状态是激活,未激活是off
nopass  :不需要密码
~*          :可访问的key
+@all      :可操作的command
2,列出所有的命令分类:
127.0.0.1:6379> 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"
3,列出⼀个命令分类下⾯所有的命令:linux安装redis服务
127.0.0.1:6379> acl cat set
1) "smembers"
2) "sinter"
3) "srandmember"
4) "sdiff"
5) "sismember"
6) "sinterstore"
7) "scard"
8) "sadd"
9) "sort"
10) "srem"
11) "sdiffstore"
12) "sunionstore"
13) "spop"
14) "smove"
15) "sscan"
16) "sunion"
4,创建⽤户/查看⽤户
创建⽤户
127.0.0.1:6379> acl setuser laoliu
OK
查看⽤户
127.0.0.1:6379> acl getuser laoliu
1) "flags"
2) 1) "off"
3) "passwords"
4) (empty array)
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
说明:可以看到,如果未明确指定,
⽤户⽆权使⽤任何命令,也⽆权访问任何key
查看添加⽤户后的acl
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
2) "user laoliu off -@all"
可以看到默认添加的⽤户状态是off,
需要把账号设置为激活状态:
127.0.0.1:6379> acl setuser laoliu on
OK
5,给laoliu账号配置权限:
127.0.0.1:6379> acl setuser laoliu on >lhdpass1 >lhdpass2 >lhdpass3 +@all ~* OK
127.0.0.1:6379> acl getuser laoliu
1) "flags"
2) 1) "on"
2) "allkeys"
3) "allcommands"
3) "passwords"
4) 1) "7ff6ac0bf1fc54b1eb01f65e306a757b91f84a0ea421508945fa3e00917d3fef"
2) "c989e79ee6baa5bfa95af56810ae3e57be9432e8700771b7bc1fbb3b7e75158b"
3) "2e634d78bd89dce200e61c6e1d1c97e22607105a01c0b84cd3ee4251e6769bb8"
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"
说明:
on    ⽤户为激活状态
>lhdpass1 >lhdpass2 >lhdpass3
添加三个密码,每个密码都可以使⽤
+@all  可以使⽤所有权限
~*      可以访问所有的key
6,查看当前⽤户/切换当前⽤户
#whoami:  查看当前⽤户
127.0.0.1:6379> acl whoami
"default"
127.0.0.1:6379> auth laoliu lhdpass2
OK
127.0.0.1:6379> acl whoami
"laoliu"
说明:5.x的auth命令⽆需⽤户名,
6.x的auth命令必须指定⽤户名
7,查看⽤户列表/删除⽤户/关闭(冻结)⽤户/激活⽤户
#acl users: 列出所有⽤户
127.0.0.1:6379> acl users
1) "default"
2) "help"
3) "laoliu"
#deluser: 删除⽤户
127.0.0.1:6379> acl deluser help
(integer) 1
127.0.0.1:6379> acl users
1) "default"
2) "laoliu"
#关闭(冻结)⽤户:设置状态为off即可
127.0.0.1:6379> acl setuser laoliu off
OK
127.0.0.1:6379> auth laoliu lhdpass1
(error) WRONGPASS invalid username-password pair
说明:关闭⽤户后已经不能再以此⽤户登录
#激活⼀个关闭的⽤户:设置状态为on即可
127.0.0.1:6379> acl setuser laoliu on
OK
127.0.0.1:6379> auth laoliu lhdpass1
OK
8,保存当前的acl
⾸先在f中配置acl⽂件的启⽤:
[root@centos8 conf]# f
编辑内容:
aclfile /usr/local/soft/redis6/conf/users.acl
说明:这个acl⽂件的路径指定,应该⽤绝对路径
启动redis前,如果users.acl不存在,则先⼿动⽣成⼀个users.acl空⽂件[root@centos8 conf]# touch /usr/local/soft/redis6/conf/users.acl
重新启动redis
[root@centos8 bin]# systemctl restart redis6
再次⽤redis-cli连接到server,
[root@centos8 bin]# ./redis-cli
127.0.0.1:6379> acl whoami
"default"
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
127.0.0.1:6379> acl save
OK
查看外部⽂件中所保存的规则:
[root@centos8 conf]# more users.acl
user default on nopass ~* +@all
可以看到,已保存成功
说明:如果当前没有配置使⽤acl外部⽂件,
则在保存acl规则时redis会给出报错:
127.0.0.1:6379> acl save
(error) ERR This Redis instance is not configured to use an ACL file.
You may want to specify users via the ACL SETUSER command and
then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration.
9,给缺省⽤户添加密码:
127.0.0.1:6379> acl setuser default on >lhdpass1 >lhdpass2 >lhdpass3 +@all ~*
OK
127.0.0.1:6379> acl getuser default
1) "flags"
2) 1) "on"
2) "allkeys"
3) "allcommands"
3) "passwords"
4) 1) "7ff6ac0bf1fc54b1eb01f65e306a757b91f84a0ea421508945fa3e00917d3fef"
2) "c989e79ee6baa5bfa95af56810ae3e57be9432e8700771b7bc1fbb3b7e75158b"
3) "2e634d78bd89dce200e61c6e1d1c97e22607105a01c0b84cd3ee4251e6769bb8"
5) "commands"
6) "+@all"
7) "keys"
8) 1) "*"
然后保存到acl

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。