设为首页 收藏本站
查看: 649|回复: 0

[经验分享] 《Redis官方教程》-Redis安全

[复制链接]

尚未签到

发表于 2018-11-2 11:36:04 | 显示全部楼层 |阅读模式
  本节提供了Redis安全主题概述,包括控制访问、代码安全以及诸于恶意注入***拦截等。
  对于安全相关的交流可以在github上建一个issue;如果担心沟通的安全,可以使用文末的GPG密钥。
  Redis一般安全模型
  Reids被设计用于在信任的环境中访问的被授权客户端使用,这意味着将Redis直接暴露到internet上,或者直接被环境中的非授权的客户端通过TCP端口访问都不是一个好的主意。
  例如,一个web应用使用Redis作为数据库、缓存或者消息系统,前端生成页面、执行请求操作或者web应用用户触发操作均将访问Redis。在这种情况下,web应用应对不受信任的客户端的进行访问控制。
  这是一个具体的例子,但是,一般情况下,非授信访问Redis必须被实现了ACLs层进行访问控制:校验用户输入以决定哪些操作可以被Redis实例执行。
  总的来说,Redis并不为了提高安全优化,而是在高性能和易用性方面进行优化。
  网络安全
  除了网络中信任的客户端能够访问Redis端口,其他请求应拒绝访问。因此运行Redis的服务器只能被使用Redis实现应用程序的计算机访问。
  对于一台电脑直接暴露在互联网的情况,如虚拟机(Linode…),应该使用防火墙阻止外部访问Redis端口。客户端应该通过环回接口访问Reids.
  注意可以在redis.conf文件添加一行如下配置绑定Redis到单个接口上:
  bind 127.0.0.1
  由于Redis设计的初衷,如果不能成功阻止外部访问Redis端口,会有很大的安全影响。外部***者使用一个FLUSHALL命令就可以删除整个数据集。
  身份验证功能
  虽然Redis没有实现访问控制,但它提供了一个简单的身份验证功能,该功能是一个可选功能,可以通过编辑redis.conf文件打开。
  身份验证功能生效,Redis将拒绝所有未经身份认证的查询请求。客户端可以通过发送(AUTH 密码)命令进行身份认证。
  密码被管理员明文配置在redis.conf文件中。它需要足够长,防止被暴力破解。原因有两点:
  Redis的查询服务非常快,外部客户端每秒可以进行多次密码测试。Redis密码存储在redis.conf文件中和客户端的配置中,系统管理员无需记住密码,因此它可以很长。
  身份验证层是一个可选的冗余层,如果防火墙或其他保护Redis安全的系统被攻破,对于不知道授权密码的情况下,***者仍不能访问Redis.
  像其他Redis命令一样,AUTH命令是明文传输的,所以仍然不能阻止那些获得网络访问权限的***者的嗅探。
  数据加密支持
  Redis不支持加密,为了实现信任的伙伴通过互联网或不信任的网络的访问设置,实现了一个附加的保护层,比如SSL代理。我们推荐spiped.
  禁用特定命令集
  Redis可以禁用命令或者重命名命令,对于正常的客户端限制使用特定的命令集。
  例如,一台虚拟化服务器提供了管理redis实例的服务。在这个环境中,正常用户不能调用CONFIG命令修改实例的配置信息,但是管理员可以。
  在这种情况下,不仅可以重命名命令,而且可以完全隐藏掉命令。这个特性可以通过在redis.conf文件中配置来实现。如:
  rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
  在上面的例子中,CONFIG命令被重名为无法猜测的名字。当然也可以通过重名为空字符来完全禁用它(或别的命令),如下面的示例所示:
  rename-command CONFIG ""
  外部特定输入触发***
  还有一类***,***者无需拥有访问权限就能从外部触发。其中一个例子就是利用了插入数据到Redis的能力来触发,因为 Redis内部组件的数据结构的实现算法太复杂。
  例如,***者可以通过WEB表单提交一串已知字符集,通过散列成相同的桶到散列表中将O(1)期望时间(平均时间)变成了O(N)的最坏情况,消耗了更多的CPU计算,最终导致拒绝访问。
  为了阻止这种***,Redis对于散列函数使用了一个预执行的伪随机数种子。
  Redis使用了qsort 算法实现了SORT命令。当前,这个算法不是随机的,因此存在因特定输入触发产品最坏情况的可能。
  字符串转义和NoSQL注入
  Redis协议没有字符串转义的概念,所以在正常环境中使用正常的客户端库是无法注入的。协议使用前缀长度的字符串,且是完全二进制安全的。
  使用EVAL和EVALSHA命令执行Lua脚本时也遵循相同的规则,因而这些命令也是安全的
  然后,需要避免使用不被信任的来源的字符串组合Lus脚本这种奇怪的用例。
  代码安全
  Redis的默认设置允许客户端访问所有的命令集,但是访问实例不能导致控制运行Redis的系统的能力。
  在内部,Redis使用众所周知的实践来写安全的代码,以阻止缓冲区溢出,格式化漏洞和内存损坏漏洞。
  然而,使用CONFIG命令控制服务配置的能力使得客户端能改变程序的工作目录和dump文件的名字,这会允许客户端在随机路径写RDB Redis文件,这是一个安全问题,容易导致用户损害系统或运行不安全的代码。
  Redis不要求使用Root特权运行。鉴于此,推荐使用一个非特权用户来运行Redis。目前,Redis作者正在调查添加一个新的配置参数来限制CONFIG SET/GET dir和其他类似运行时配置指令的可能性。这将阻止客户端在任意位置强制写Redis dump文件。
  转自 https://www.douban.com/note/538960036/?type=like


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-629792-1-1.html 上篇帖子: 如何用Redis实现分布式缓存 下篇帖子: 程序架构之redis扩容 (增加端口)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表