很久之前还分享了一篇Redis 未授权访问配合 SSH key 文件利用分析给运维同事,不想今天居然遇上了,特此记录。
发现问题:公司游戏的韩国版本今天停服更新之后,公会信息都丢失了,一开始以为是公会数量太多,特定数量的下发包也超过了网络层的包大小限制。
跟踪问题:
1.到现网机器上看redis数据,居然查不到公会数据,不过发现redis居然还是绑定的*,不是内网ip(不过介于运维同事说是这一块做了防火墙设置就没有细究)
2.查看gamesvr发现一堆“MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.”,直接查看redis源码,产生这个问题的原因就是background save进程没有正常终止
3.这个问题细分情况:
1)无法fork快照进程
2)磁盘已满,快照进程无法完成写操作
3)快照进程被终止,比如kill
4.查看每一小时的rdb备份文件,发现几天内备份的rdb文件都是4月1日的最后更新时间,推断此问题应该是从4月1号开始就是存在的,扫描日志果然如此,由于小平台的redis报警被屏蔽了,问题存在了几天才被偶然发现
5.redis命令行config get *,查看发现dir变成了‘/root/.ssh’, dbfilename变成了'authorized_keys',还是下一身冷汗,这是被入侵了
解决问题:
1.凑巧的是运维同事在4月1号下午的时候统一更换了ssh key,而后面这位不速之客也没有再重新生成ssh key,应该是以为肉鸡已经捕获
2.修改redis配置,将dir和dbfilename指向真正的数据文件,停服重启gamesvr,公会数据加载正常
3.分析日志生成补偿指令,修正玩家数据