因为毕设项目中一直要使用到Redis,而每次都要去关服务器上的防火墙,不然项目连接不上。所以我开放了防火墙的6379端口,想着终于方便了许多。
然后,过完年的我开项目的时候发现又连不上Redis了,登上服务器发现Redis被关掉了,但我清晰的记得我没有关过Redis,而在我没有手动关闭的情况下它是一定不会被关闭的,所以猜测是不是服务器被黑掉了,然后top命令查看,阿里云的控制台上查看监控,果不其然,cpu占用100%。
既然问题找到了,就开始解决吧,然后发现这次似乎并不好弄。之前我也碰到过服务器被黑掉的情况,不过上次要好解决多了,找到高占用的进程杀掉然后重启就好了,在此,引用一个下午看到的比较不错的解决思路:
平时的中木马处理流程:
1、top查看服务器情况。
2、查找到异常高占用cpu的进程。
3、ps -ef | grep PID 查找相关运行脚本,删除脚本
4、crontab -l 查看异常定时任务 或者 /etc/crontab 或者 /etc/cron.d 查找异常定时任务 删除
5、进程kill掉。
一般情况服务器上面的思路应该都可以解决,但是写到了这里,很显然我并没有用上面的思路解决我的问题。特别诡异的是并没有找到cpu占用很高的那个进程,在top命令的监控窗口下最高占用的只有一个0.3%。重启服务器过了一会后cpu占用又上来了。
下面开始说我自己的排查思路,首先我知道一定是Redis端口开放带来的问题,因为防火墙以及阿里云发安全规则啥的都开着,不大可能有问题。幸好我一直在学习Redis,手边也有Redis的书,所以大致明白服务器是怎样被木马侵入的的了,总的来说就是:
1. 使用Redis的开放端口连接我的服务器;
2. 生成公钥;
3. 通过向我的Redis发送命令将生成的公钥保存到我的Redis中并持久化;
4. 然后就可以使用ssh的方式连接我的服务器了。
然后我打算立即删除掉人家存放的公钥,在我的/root/.ssh目录下找到了公钥文件,但是当我删除的时候发现提示我没有权限。我是以root账号登录的,不可能是没有权限的。还好有百度,原因是使用lsattr命令查看文件是否有i属性,这个属性会使得文件无法删除,同时我的文件还有a和e属性,也会使得文件无法删除,使用chattr -i xxx命令去除属性即可正常删除了。
删除掉人家存放的公钥后,我去查看了服务器上的定时任务,确实有一个定时任务,然而当我打算删除这个定时任务时,发现这个定时任务也无法删除,原因应该和上面是一样的。
总的来说,之所以出现这次的问题还是因为存有侥幸心理,想着不会出现问题,但还是出现了,只是不知道它会在什么时候出现。