美文网首页互联网科技程序员Java 杂谈
一个危险 Redis 命令,导致公司损失 400 万!!

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

作者: java成功之路 | 来源:发表于2018-09-28 20:29 被阅读72次

    什么样的 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区域,如以下图所示。

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

    1)禁用命令

    rename-commandKEYS""rename-command FLUSHALL""rename-command FLUSHDB""rename-command CONFIG""

    2)重命名命令

    rename-commandKEYS"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    rename-command FLUSHALL"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    rename-command FLUSHDB"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    rename-command CONFIG"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    上面的 XX 可以定义新命令名称,或者用随机字符代替。

    经过以上的设置之后,危险命令就不会被客户端执行了。

    相关文章

      网友评论

        本文标题:一个危险 Redis 命令,导致公司损失 400 万!!

        本文链接:https://www.haomeiwen.com/subject/cthmoftx.html