标签:127.0 0.1 Redis 用户 6379 ACLs 6.0
在2019年纽约的Redis Day上,Salvatore Sanfilippo(AKA Antirez)介绍了即将发布的Redis 6.0的新特性。以下是关于ACLs的内容。
ACLs简介
在过去的十年中,Redis都会有这样的问题:
用户执行FLUSHALL
,OK现在整个数据库就空了,或者执行DEBUG SEGFAULT
,然后Redis的进程就crash退出了。
(右侧运行redis-server,左侧执行debug segfault后server崩溃退出)
在以前解决这个问题的办法可能是在Redis配置中将危险命令进行rename:
rename-command FLUSHALL ""
这样将命令更名为随机字符串或者直接屏蔽掉,以满足需要。
缺少危险命令管理就会导致很多问题,比如当你使用网络上的一些库的时候,你压根就不知道别人会不会在里面加些FLUSHALL
这样的命令,或者你也可以每次用外部代码都进行一轮Code Review。
ACLs,也就是Access Control List,当有了ACLs之后,你就可以控制比如:
当前的用户(连接)只允许使用RPOP
,LPUSH
这些命令,其他命令都无法调用。
是不是很方便?来看看ACLs是怎么工作的。
最佳实践
首先你要做的是定义用户。
当登录的时候,旧版本中默认用户(defaule user)是可以做任何事的,在Redis 6.0中你可以定义默认用户:
127.0.0.1:6379> ACL setuser antirez on >password1 >password2 >foobar +@all ~*
setuser
...on
表示启用此用户,off则是只定义一个不可用(unaccessable)的用户。
>password1 >password2 >foobar
表示设置了3个密码,可以用来做密码轮换策略。
+@all
表示用户可以使用所有权限,+
后面跟命令权限如+get
,或者+@
后面跟某一类权限。
~*
表示可用(accessable)的键名,这里是*
也就是所有键都可被访问。
127.0.0.1:6379> ACL WHOAMI
"default"
现在是处于默认用户下的,切换用户:
127.0.0.1:6379> AUTH antirez foobar
OK
在以前AUTH后面是直接跟密码的,现在是用户名和密码。
127.0.0.1:6379> ACL WHOAMI
"antirez"
因为之前给这个用户设置的是所有命令可用+所有键可见,所以现在跟default用户没有什么区别:
127.0.0.1:6379> GET foo
(nil)
127.0.0.1:6379> SET foo bar
OK
现在去掉一些权限:
127.0.0.1:6379> ACL setuser antirez -SET
把这个用户的SET
权限去掉后,就不能进行这个操作了:
127.0.0.1:6379> GET foo
"bar"
127.0.0.1:6379> SET foo 123
(error) NOPERM this user has no permissions to run the 'set' command or its subcommand
再来查看一下现在的ACL list:
127.0.0.1:6379> ACL list
1) "user antirez on >password1 >password2 >foobar ~* +@all -set"
2) "user default on nopass ~* +@all"
类似的,你也可以限制用户可以用任何命令但是却只能看部分键,如object*
。
备注
ACLs的实现使用了一些小技巧,像用上了命令的位图(commands' bitmaps),以便让它不会在速度上有所下降。
不使用ACLs的话就和原来的Redis 5一样,使用ACLs当然会有一些额外的开销,但是它们非常小,你在benchmarks中不会察觉到新旧版本的区别。
标签:127.0,0.1,Redis,用户,6379,ACLs,6.0 来源: https://www.cnblogs.com/zepc007/p/11986324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。