一个致命的 Redis 命令,导致公司损失 400 万!!

最近安全事故濒发啊,前几天发生了《顺丰高级运维工程师的删库事件》,今天又看到了 PHP 工程师在线执行了 Redis 危险命令导致某公司损失 400 万。。

什么样的 Redis 命令会有如此威力,造成如此大的损失?

具体消息如下:

据云头条报道,某公司技术部发生 2 起本年度 PO 级特大事故,造成公司资金损失 400 万,原因如下:

由于 PHP 工程师直接操作上线 redis,执行 keys wxdb(此处省略)cf8 这样的命令,导致redis锁住,导致 CPU 飙升,引起所有支付链路卡住,等十几秒结束后,所有的请求流量全部挤压到了 rds 数据库中,使数据库产生了雪崩效应,发生了数据库宕机事件。

该公司表示,如再犯类似事故,将直接开除,并表示之后会逐步收回运维部各项权限。

看完这个消息后,我心又一惊,为什么这么低级的问题还在犯?为什么线上的危险命令没有被禁用?这事件报道出来真是觉得很低级。。。

且不说是哪家公司,发生这样的事故,不管是大公司还是小公司,我觉得都不应该,相关负责人应该引咎辞职!!!

对 Redis 稍微有点使用经验的人都知道线上是不能执行 keys * 相关命令的,虽然其模糊匹配功能使用非常方便也很强大,在小数据量情况下使用没什么问题,数据量大会导致 Redis 锁住及 CPU 飙升,在生产环境建议禁用或者重命名!

还有哪些危险命令?

Redis 的危险命令主要有以下几个:

keys
客户端可查询出所有存在的键。

flushdb
Delete all the keys of the currently selected DB. This command never fails.

删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败。

flushall
Delete all the keys of all the existing databases, not just the currently selected one. This command never fails.

删除 Redis 中所有数据库中的所有记录,不只是当前所在数据库,并且此命令从不会执行失败。

config
客户端可修改 Redis 配置。

怎么禁用或重命名危险命令?

看下 redis.conf 默认配置文件,找到 SECURITY 区域,如以下所示。

################################## SECURITY ###################################

Require clients to issue AUTH <PASSWORD> before processing any other

commands. This might be useful in environments in which you do not trust

others with access to the host running redis-server.

#

This should stay commented out for backward compatibility and because most

people do not need auth (e.g. they run their own servers).

#

Warning: since Redis is pretty fast an outside user can try up to

150k passwords per second against a good box. This means that you should

use a very strong password otherwise it will be very easy to break.

#

requirepass foobared

Command renaming.

#

It is possible to change the name of dangerous commands in a shared

environment. For instance the CONFIG command may be renamed into something

hard to guess so that it will still be available for internal-use tools

but not available for general clients.

#

Example:

#

rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

#

It is also possible to completely kill a command by renaming it into

an empty string:

#

rename-command CONFIG ""

#

Please note that changing the name of commands that are logged into the

AOF file or transmitted to slaves may cause problems.

看说明,添加 rename-command 配置即可达到安全目的。

1)禁用命令

rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
2)重命名命令

rename-command KEYS "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHALL "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command FLUSHDB "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
rename-command CONFIG "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
上面的 XX 可以定义新命令名称,或者用随机字符代替。

经过以上的设置之后,危险命令就不会被客户端执行了。
在这里给大家提供一个学习交流的平台,java架构师群: 867748702

具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。

在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。

如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。


加Java架构师进阶交流群获取Java工程化、高性能及分布式、高性能、深入浅出。高架构。
性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限
都是大牛带飞 让你少走很多的弯路的 群号是: 867748702对了 小白勿进 最好是有开发经验

注:加群要求

1、具有工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

转载于:https://blog.51cto.com/13963248/2286054

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值