Linux 服务器被植入挖矿程序
入侵者留下的挖矿程序常常不止一个进程,系统重启后还可能自动复活。查杀必须覆盖进程、文件、定时任务和后门四个维度。
下面从零开始,带你在 CentOS 7 / Ubuntu 22.04 上完成彻底清理。
准备工具与环境检查
操作前先确认两件事:
- 使用 root 用户:执行
sudo -i切换到 root。 - 备份重要数据:避免误删业务文件。
- 关闭 Web 服务(如果环境允许):
systemctl stop nginx mysql,减少误报。
如果没有安全软件,先安装系统自带的 lsof、ps 和 crontab 工具:
yum install -y lsof procps-ng # CentOS
apt install -y lsof procps # Ubuntu
三步查杀残留:进程、文件、定时任务
第一步:揪出可疑进程
运行 top -c 查看 CPU 占用异常高的进程,记住 PID。然后查看该进程的完整路径:
ls -l /proc/可疑PID/exe
杀掉进程并删除对应文件:
kill -9 可疑PID
rm -rf /proc/可疑PID/exe 指向的路径
第二步:清除自动复活机制
挖矿程序常通过 crontab 保持存活。检查当前用户及所有用户的定时任务:
crontab -l
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null; done
发现异常条目(如下载脚本、执行挖矿命令)后,编辑清除:
crontab -e # 删除对应行后保存
第三步:扫描隐藏文件与后门
挖矿文件常用隐藏目录如 /tmp、/var/tmp、/dev/shm。重点排查:
find /tmp /var/tmp /dev/shm -type f -newer /etc/passwd -mmin -60 2>/dev/null
检查 SSH 密钥是否被替换:
ls -la ~/.ssh/authorized_keys
若有陌生公钥,立即删除。
避坑指南:容易漏掉的关键点
- 不要只杀进程:进程重启后自动拉起,必须配合 crontab 清理和文件删除。
- /etc/ld.so.preload 劫持:检查该文件是否存在,若存在用
cat /etc/ld.so.preload查看,删除无名的 .so 文件。 - docker 容器内的挖矿:如果服务器运行了 Docker,用
docker stats查看异常容器,直接docker stop && docker rm容器。 - 别忘记系统仓库:部分挖矿程序写入
/etc/rc.local、/etc/systemd/system/下的恶意服务,执行systemctl list-units --type=service | grep -i crypto逐个禁用并删除文件。
验证清理效果与后续加固
清理完成后重启服务器(若业务允许):
reboot
重启后再次执行 top 观察 CPU 是否恢复正常。使用 netstat -antp 检查是否有对外连接的异常 IP(如 194.233.x.x 常见挖矿池)。
长期防护建议:
- 修改所有密码为强密码(16位以上字母数字+符号)。
- 关闭不必要的端口,如 22 端口改用密钥登录。
- 安装 fail2ban 防止暴力破解。
高频问题解答
Q:查杀后仍然有残留进程,怎么办?
A:很可能 rootkit 劫持了系统命令。使用 busybox ps 或从安全 U 盘启动后用静态编译的查毒工具扫描。
Q:宝塔面板用户怎么操作?
A:登录宝塔后台 -> 文件管理,全局搜索文件名包含 xmrig、minerd 的文件,删除。然后在计划任务中删掉可疑脚本。在软件商店安装“系统防火墙”插件,拦截挖矿池 IP。
如果你的服务器刚被植入挖矿程序,优先按上面步骤杀进程、删 crontab、查后门,再重启验证。
遇到特殊变种可留言补充,我会持续更新应对方案。