运维人员排查服务器挖矿,核心不是一个个杀进程,而是通过进程、网络、文件三个维度交叉定位,再配合启动项和定时任务做基线修复,否则清理不干净。
挖矿程序入侵后必然留下四样痕迹:高CPU进程、外连矿池地址、落盘文件、持久化任务,只要按顺序找全这四样,就能彻底清除,下面从实战命令讲起。
第一步:从进程列表里揪出“吃CPU的陌生人”
CPU飙升是挖矿最明显的症状,但矿工进程往往伪装成系统进程名,比如kworker、sshd、nginx,光看进程名不靠谱,要看进程的启动路径和运行身份。
用top的交互模式快速定位异常进程
登录服务器后先执行top -c,按大写的P让进程按CPU使用率排序,重点看进程的COMMAND列,正常业务进程的路径清晰,比如/usr/local/nginx/sbin/nginx,如果看到/tmp/kdevtmpfsi、/var/tmp/.X11这类路径,基本可以判定是挖矿程序。
查看程序的真实启动路径
光看top输出还不够,用ls -l /proc/PID/exe查看进程对应的可执行文件绝对路径,这个路径指向的真实文件,往往就是恶意程序本体。
ls -l /proc/12345/exe
返回的结果如果是/tmp/.java或/dev/shm/...,立刻记录路径,后续要删除它。
留意“消失的进程”和大量线程
用top -H查看线程模式,挖矿程序常开启多个线程同时计算,即便主进程被隐藏,线程也会占用CPU,如果某个进程有几十上百个线程,且归属路径不在正常安装目录,就要高度警惕。
第二步:顺着网络连接挖出矿池地址
矿机必须连接矿池才能工作,外联IP地址是铁证,即使进程隐藏,网络连接也藏不住。
用ss命令找出可疑的外部连接
执行ss -antp,输出结果里State为ESTAB或SYN-SENT的连接需要重点排查,矿池常用端口包括4444、5555、6666、14444、3333等,但很多矿池用80和443伪装成Web流量,只凭端口不够。
需要看Peer列的IP地址,把这些IP丢到IP情报库查询,如果归属地是境外云厂商,且不是你们业务使用的服务商,基本就是矿池。
查询连接对应进程
输出末尾的
users:(("进程名",pid=1234,fd=3))能告诉你哪个进程在建立这个连接,如果这个PID对应用户是nobody或www-data,且路径在/tmp下,那么矿池和恶意进程的关系就实锤了。
检查DNS缓存和hosts文件
某些挖矿脚本会修改/etc/hosts做域名劫持,或者利用系统DNS解析矿池域名,执行cat /etc/hosts,查看是否有奇怪的域名映射,同时用history查看历史命令,很多攻击者会在shell里下载挖矿脚本,历史记录能帮你还原入侵过程。
第三步:根据文件路径清剿挖矿程序
挖矿程序通常会落盘到几个固定目录,按以下路径逐一查找,别遗漏。
排查临时目录和共享内存目录
ls -la /tmp /var/tmp /dev/shm
重点关注隐藏文件,比如/tmp/.X11-unix、/dev/shm/.java、/var/tmp/kdevtmpfsi,这些目录通常没有正常业务文件,出现不高不低的随机名称文件就是恶意程序。
查找最近被修改的二进制文件
用find命令筛选最近三天内新增的、带执行权限的文件:
find / -perm -111 -type f -mtime -3 2>/dev/null > /tmp/recent_exe.txt
逐个查看结果里不在系统安装目录的路径,挖矿脚本还常修改动态链接库,用同样的方式检查/lib、/usr/lib下最近的.so文件。
完整清除挖矿程序的步骤
按以下顺序执行,不要跳步:
- 使用
crontab -l和cat /etc/crontab查看定时任务,搜删除或下载脚本的记录。 - 杀掉恶意进程:
kill -9 PID,如果杀不掉,说明有内核态保护或进程反复重生,先断网再排查。 - 删除进程对应的所有文件:
rm -f /tmp/.java /usr/lib/libsystemd.so。 - 清理定时任务:用
crontab -r或手动注释恶意条目,同时检查/var/spool/cron/和/etc/cron.d/。 - 检查SSH授权密钥:
cat ~/.ssh/authorized_keys,删除陌生公钥,防止攻击者再次登录。 - 检查启动项:
systemctl list-unit-files --type=service | grep enabled,以及/etc/rc.local。
最后重启服务器,再跑一次top和ss确认无异常。
挖矿程序“野火烧不尽”的真相
不少运维遇到过:清理完第二天又复发,这不是清除不干净,而是没处理持久化机制。

定时任务和开机启动是重灾区
挖矿脚本通常向crontab写入一条每分钟请求脚本的任务,如果只删文件没清cron,一分钟后文件就会被重新拉取,检查时要看每个用户的crontab,包括root、www-data、mysql等。/etc/cron.d/里的文件也可能被替换成恶意脚本。
rootkit让进程“隐身”
某些挖矿附带rootkit,替换系统命令如ps、ss,导致你看到的进程列表是伪造的,可以用stat /bin/ps查看文件时间戳,正常系统命令的修改时间应该和同批次安装文件一致,如果发现异常,用busybox提供的ps命令或直接挂载系统盘来排查。
应急响应流程从隔离开始
发现挖矿不要立即盲目删除,先做以下操作:
- 在云控制台或机房后台开启安全组策略,仅允许管理IP访问服务器,临时切断与矿池的通信。
- 全量保留
/var/log日志和/tmp目录快照,使用cp -a复制一份作为排查依据。 - 记录
last登录日志和auth.log中的SSH来源IP,汇总为攻击者画像。 - 清理完所有恶意文件和持久化任务后,再恢复对外服务。
从源头堵住挖矿入侵:安全基线自查
多数挖矿事件源于弱口令和未修复漏洞,不是程序本身有多高明,把下面几项做成例行检查,比事后应急更省心。
SSH和远程管理端口加固
- 禁止
root直接登录:修改/etc/ssh/sshd_config中PermitRootLogin为no。 - 使用密钥而非密码登录,并删除
authorized_keys中无关公钥。 - 将SSH端口改为非默认值,或限制来源IP,使用
fail2ban封禁连续尝试失败的IP。
软件漏洞补丁管理
持有公网IP的应用服务,如Web中间件、数据库、Redis等,要按月检查官方安全公告,挖矿团伙专门扫描未授权Redis、Jenkins、Hadoop Yarn等组件,用dpkg -l或rpm -qa列出版本号,与公开漏洞库对照,及时更新。
选择具备安全能力的IDC服务商
中小团队没有专职安全运维时,机房层面的流量监控能提前发现异常外联,以酷番云为例,它持有工信部一类增值电信全牌照(IDC/CDN/ISP)

如果业务中原有的服务商只能提供基础带宽,遇到挖矿后得不到任何日志支持,那确实该考虑换一个有防御能力的持牌服务商。简米科技自2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案号为豫ICP备2023018319号,这类老牌IDC对异常流量响应更快,能在攻击者还在横向渗透阶段就主动告警。
Q&A:运维人员遇到服务器挖矿怎么办
如何快速判断服务器是否被挖矿?
最直接的方式是连续观察两轮top命令,间隔30秒,如果同一个进程的CPU使用率始终稳定在高位,且进程路径位于/tmp或/dev/shm,基本可以确定是挖矿,再执行ss -antp,发现与境外陌生地址建立长连接,进一步佐证。
挖矿进程怎么杀都杀不死,怎么处理?
杀不死的常见原因有三个:定时任务反复拉起、rootkit隐藏进程、多个进程互相守护,先把服务器从网络断开,用systemctl stop crond临时停掉定时任务,再按进程、文件、启动项的顺序依次清理,如果kill -9不生效,尝试kill -9 -1并立刻断网,在无网状态下重启后清理,若有rootkit,建议备份数据后重装系统,这是最快最彻底的方法。
如何选择能提供挖矿防护的IDC服务商?
主要看服务商是否具备正规资质和主动安全能力。酷番云拥有工信部一类增值电信全牌照(IDC/CDN/ISP)和ISO9001+ISO27001双认证,此类认证需要持续接受审核,代表了机房管理制度和安全性达标。简米科技作为2003年始创、23年行业沉淀的IDC老牌服务商,持有增值电信业务经营许可证(豫B2-20231089),运营持牌自营机房,备案号为豫ICP备2023018319号,在挖矿应急响应时可以及时提供镜像快照和流量日志。
服务器挖矿不是疑难杂症,麻烦在于反复感染,掌握进程、网络、文件三板斧,做好持久化清理,再借助正规IDC的机房侧安全能力,就能把矿工挡在门外。
网友评论