服务器有一个正在运行的bash
进程,CPU使用率为2200%:
$ ps aux | grep 10986
root 10986 2198 1.8 2483184 2437820 ? Ssl 13:23 962:25 -bash
该进程有 22 个-bash
线程,如图所示htop
。
使用时strace
,父进程保持epoll_pwait()
,子线程保持sched_yield()
。
我尝试过kill -9 10986
,但是几分钟后,bash 进程重新启动,并且 CPU 使用率仍然很高。
有人告诉我,几个小时前他曾经screen
运行过如下 bash 脚本:
./prog <arg1>
./prog <arg2>
./prog <arg3>
...
但当他再次登录时整个目录消失了,并且该进程仍然无法终止。
答案1
您需要终止所有用户的 bash 会话,而不是逐个终止自我再生的进程:pkill -9 bash
从启动所有这些会话的用户开始。
要跟踪启动新 bash 进程的内容,请运行终端。然后journalctl -f | grep bash
在其中运行并查看在某个 bash 进程被终止后发生了什么变化。您现在无法终止所有 bash 进程,因为这将终止 journalctl 会话。
您还可以尝试ps f -g PID
查看一些 bash 进程树。这些 bash 进程是您需要获取其名称的某个父进程的子进程。
如果被终止的进程再次被重新生成,那么它们将在 crontab 中安排或由 systemd 服务启动。
答案2
我也遇到过同样的病毒
您可以检查/etc/cron*/sync
. 使用chattr -i
使其可删除。然后删除它。病毒 exe 是/bin/sysdrr
我找到了它,jounalctl | grep cron
这一行与May 13 09:17:01 micagent-S2600CW CRON[31589]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
病毒进程的启动时间相匹配。所以我查看了一下,发现-bash
正在执行并被删除。
sudo crontab -e
没有显示这个地方。我不熟悉。对于像我这样的新手,请转到 /etc/cron*/sync。