服务器被植入挖矿进程,如何通过 top 命令发现?
服务器突然变慢,CPU 持续跑满,SSH 偶尔掉线——很可能是被植入了挖矿进程。
别慌,本文手把手教你用自带的 top 命令把它揪出来,全程只需三步,零基础也能操作。
观察前先确认两件事
在动手之前,先确保你有以下两样东西:
- SSH 登录权限:用 root 账户或具有 sudo 权限的账户登录服务器。
- top 命令可用:绝大多数 Linux 发行版都预装了 top,直接在终端输入
top回车就能启动。如果提示“command not found”,先跑一遍yum install procps -y(CentOS)或apt install procps -y(Ubuntu)。
另外,建议另外开一个 SSH 窗口准备停用挖矿进程,防止主窗口卡死。
第一步:用 top 找到 CPU 占用异常的进程
在终端执行以下命令:
top
你会看到一个实时刷新的列表,
默认按 CPU 占用率降序排列。盯着第一屏的 %CPU 列,
正常情况下占用超过 100% 的(多核情况)已经很可疑了,
如果某个进程长期占用 300% 以上且名字很陌生,
八九不离十是挖矿。
遇到可疑进程,先记下它的 PID(进程 ID)和 COMMAND(进程名)。
常见挖矿进程会伪装成:
java(但实际路径不在/usr/java)httpd、nginx(但非 Web 服务端口)- 随机字母组合,如
khilmn、xig、wtmp - 甚至直接叫
top(迷惑你)
第二步:按 CPU 排序并切换显示完整命令
如果可疑进程很多,可以进入 top 后按 P(大写)强制按 CPU 占用重新排序。
再按 c 键,能显示进程的完整命令行路径,比默认的短名更容易看出猫腻。
比如看到 /tmp/.systemd/systemd-update 这种路径,基本是挖矿病毒。
正常的系统进程都在 /usr/、/bin/、/sbin/ 下。
第三步:确认并临时终止挖矿进程
找到 PID 后,不要急着直接杀掉,先记录一下进程名和路径。
然后在另一个 SSH 窗口执行:
kill -9
比如 kill -9 23456。
如果立刻又恢复了,说明有守护进程或定时任务自动重启。
这时候需要先往下看“避坑指南”。
避坑指南:别漏掉这些隐蔽点
- 伪装成系统服务:很多挖矿进程会把自己注册成 systemd 服务,比如叫
ondemand.service、update-motd.service。用systemctl list-units --type=service --state=running检查。 - 定时任务复活:挖矿脚本常写在
/etc/crontab或用户 crontab 里。执行crontab -l和cat /etc/crontab,删除可疑任务行。 - 替换 top 命令:有些病毒会把
top命令替换成隐藏版本,让你看不到它。可以运行which top看路径是否正常,或者用htop、ps aux --sort=-%cpu辅助判断。
验证效果:确认挖矿进程不再复现
杀掉进程并清理定时任务后,再次执行 top,观察几分钟。
如果 CPU 占用率回落到 1% 以下(或你的业务正常水平),基本说明挖矿进程被临时干掉了。但请注意:这只是从表面清除了进程,并不代表服务器安全了,还要检查 SSH 密钥、弱口令、未修复漏洞等。
建议后续做一次全盘扫描。
如果你正在处理服务器被植入挖矿进程的问题,建议先按本文步骤完整执行,再根据自己的环境排查其他可疑文件。
遇到异常时,优先回看避坑和高频问题部分,找找守护和定时任务。
安全无小事,持续监控才是常态。