Linux 服务器 CPU 占用 100% 如何排查是否为木马进程导致?

文章导读
CPU 占用飙到 100% 不一定是木马,但如果是未知进程且伴随异常外连,大概率是挖矿或扫描脚本。建议先隔离网络再排查进程,避免直接 kill 导致线索中断或业务误伤。
📋 目录
  1. A 应急命令全集
  2. B 分步排查与清理
  3. C 怎么验证是否生效
  4. D 常见坑与风险规避
  5. E 误操作恢复方案
A A

CPU 占用飙到 100% 不一定是木马,但如果是未知进程且伴随异常外连,大概率是挖矿或扫描脚本。建议先隔离网络再排查进程,避免直接 kill 导致线索中断或业务误伤。

先说结论:高 CPU 本身不是中毒证据,需结合进程名、启动来源和网络连接综合判断,确认为恶意进程后再清理。

  • 先判断:确认是业务高峰还是异常进程占用
  • 优先做:断开可疑进程的网络连接或限制出站流量
  • 再验证:清理后观察 CPU 是否回落且进程不再复活

应急命令全集

以下命令需 root 权限或 sudo 执行,用于快速定位与处置:

top -c

按 Shift+P 按 CPU 排序,记下高占用 PID。

sudo ps -fp <PID>

查看进程启动命令全称及用户。

Linux 服务器 CPU 占用 100% 如何排查是否为木马进程导致?
sudo ss -antp | grep <PID>

查看该进程是否有异常外连(普通用户可能无法查看进程名)。

ls -l /proc/<PID>/exe

查看进程真实文件路径,若指向/tmp 风险较高。

kill -15 <PID>

优先尝试温和终止进程,无效再用 kill -9。

chattr -i /path/to/suspicious_file

若文件无法删除,先解锁隐藏属性。

分步排查与清理

1. 定位高占用进程
使用 top 命令找到 CPU 占比最高的 PID,注意观察进程名是否可疑(如随机字符、伪装成 systemd 但路径不对)。

Linux 服务器 CPU 占用 100% 如何排查是否为木马进程导致?

2. 检查进程路径和启动参数
执行 ls -l /proc/<PID>/exe 查看真实文件路径。如果路径指向/tmp、/var/tmp 或隐藏目录,风险较高。

3. 排查网络连接
使用 sudo ss -antp 查看该进程是否连接陌生 IP。挖矿程序通常会连接矿池域名或 IP。

4. 检查持久化机制
检查 crontab -l、/etc/cron.d/ 以及 systemd 服务。可使用以下命令快速检索异常任务:

sudo grep -r "suspicious_keyword" /etc/cron* /var/spool/cron/*

同时检查 SSH 授权密钥:

Linux 服务器 CPU 占用 100% 如何排查是否为木马进程导致?
cat ~/.ssh/authorized_keys

5. 清理与加固
确认恶意后,按顺序执行:

  1. 备份可疑文件(便于后续分析):cp /path/to/file /root/backup_$(date +%F)
  2. 停止进程:kill -15 <PID> 或 kill -9 <PID>
  3. 解锁文件属性(如有):chattr -i /path/to/file
  4. 删除文件:rm -f /path/to/file
  5. 清理启动项:编辑 crontab 或删除异常 service 文件
  6. 加固:建议修改 root 密码,并检查 ~/.ssh/authorized_keys 是否有异常公钥

怎么验证是否生效

清理后持续观察 top 命令,确认 CPU 占用率回落至正常水平。同时监控该进程 PID 是否重新出现,以及可疑文件是否被重新下载。检查系统日志 /var/log/secure 或 /var/log/auth.log,确认没有新的异常登录。

常见坑与风险规避

1. 直接删除运行中的文件:进程可能仍在内存运行,需先 kill 再删文件。
2. 忽略隐藏属性:部分木马会给文件加 chattr +i 属性,导致无法删除,需先解锁。
3. 只杀进程不清任务:定时任务会在几分钟后重新下载脚本,导致问题复发。
4. 误删业务进程:某些业务进程本身占用高,需先确认业务重要性再操作。
5. 删除前未备份:误删系统文件可能导致无法恢复,务必先 cp 备份。
6. 滥用 kill -9:优先使用 kill -15 让进程正常退出,避免产生僵尸进程或数据损坏。

误操作恢复方案

若误删了业务文件导致服务异常:

  1. 立即停止相关服务,防止错误扩大。
  2. 从之前的备份目录(如 /root/backup_)恢复文件。
  3. 若无备份,尝试通过包管理器重装对应软件(如 yum reinstall package_name)。
  4. 检查系统日志确认是否有其他连带损坏。