
你打开监控,CPU曲线从早上的5%突然跳到100%,持续了一整天。登录服务器,top一看,一个名叫[kworker]或httpd的进程占满了CPU。你不记得自己跑过这样的任务。再仔细看,进程的执行文件在/tmp目录下,文件名是一串随机字符。
你的服务器被挖矿了。
攻击者不知道从哪里溜了进来,在你的服务器上装了个挖矿程序,用你的电、你的CPU,帮他挖加密货币。你的网站变慢,电费账单涨了,而他拿走了收益。更糟的是,他可能还留了后门,随时再回来。
今天聊3步:怎么发现、怎么清理、怎么防止再进来。
先看一个数据
根据某安全厂商的报告,2024年挖矿病毒占服务器入侵事件的60%以上。攻击者不挑食,个人博客、创业公司、高校服务器,都是目标。
被挖矿的服务器,通常CPU持续100%,平均每天的额外电费虽然不多,但性能损失和潜在的后续隐患可能很大。更麻烦的是,挖矿程序往往会禁用安全工具、修改系统配置,为后续更严重的攻击(如勒索病毒)铺路。
第一步:发现挖矿
挖矿病毒有几个典型特征:
- CPU持续100%:挖矿需要大量算力
- 进程名伪装:喜欢叫
[kworker](方括号是内核进程的伪装)、httpd、nginx、sshd,或者一串随机字符 - 执行文件在临时目录:
/tmp、/var/tmp、/dev/shm - 连接外部矿池:网络连接指向常见矿池端口(4444、5555、7777、8080)
- 定时任务:黑客为了让病毒重启后还能跑,会在crontab里加一行定时下载脚本
快速定位命令:
bash
# 看CPU最高的进程 top -c # 找到PID后,查看进程的执行文件位置 ls -l /proc/PID/exe # 查看进程的网络连接 netstat -tunp | grep PID
如果执行文件在/tmp下,或者显示(deleted),基本就是挖矿。再看网络连接,如果连到陌生IP(尤其是境外IP),确认无疑。
第二步:清理挖矿
1. 杀掉进程
bash
kill -9 PID
如果杀不掉,进程会不断重启,说明有守护进程或定时任务在护着它。
2. 删除恶意文件
bash
rm -f /tmp/恶意文件名
3. 清理定时任务
bash
crontab -l # 查看当前用户的定时任务 crontab -e # 编辑,删掉可疑行
还要检查系统级定时任务:
bash
cat /etc/crontab ls /etc/cron.d/ ls /etc/cron.hourly/
4. 检查开机启动项
bash
systemctl list-unit-files | grep enabled
如果发现有陌生服务,systemctl disable 并 systemctl stop。
5. 检查SSH公钥
黑客可能把自己的公钥加进去,方便下次进来。
bash
cat ~/.ssh/authorized_keys
不认识的就删掉。
6. 查看最近修改的文件
bash
find / -type f -mtime -1 2>/dev/null | grep -v -E "(/proc|/sys|/dev)"
看看过去24小时哪些文件被改了,有没有可疑的脚本或二进制文件。
如果清理完后CPU恢复正常,基本没问题了。如果不确定有没有清理干净,备份数据,重装系统。
第三步:预防再被挖
挖矿病毒能进来,说明你的服务器有漏洞。清理完不补洞,明天还会中。
1. 改密码
所有密码:root、数据库、网站后台、FTP。不要重复使用。
2. 禁用root远程登录 + 改用密钥认证
bash
# 编辑 /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no
3. 安装fail2ban
防止暴力破解。配置方法参考之前相关文章。
4. 定期更新系统
bash
apt update && apt upgrade -y # Ubuntu/Debian yum update -y # CentOS/RHEL
至少每周跑一次,或者开启自动安全更新。
5. 监控告警
设置CPU使用率告警,超过80%就发通知。Netdata、云监控都可以。第一时间发现,第一时间处理。
6. 限制crontab使用
只有root能编辑crontab,普通用户不能。修改/etc/cron.allow。
攻击者是怎么进来的?
了解入口,才能针对性防守:
- 弱密码:最简单也最常见的入口,root密码123456
- Redis未授权访问:Redis没设密码,暴露在公网
- Docker未授权访问:2375端口暴露
- Jenkins、Tomcat等管理后台弱密码
- 旧版本漏洞:Struts2、Log4j等
检查这些服务,该设密码的设密码,该加防火墙规则的限制访问来源。
真实案例
一个创业公司的测试服务器被挖矿,CPU 100%跑了一周才发现。攻击者是从Redis进去的——Redis没设密码,暴露在公网。清理挖矿后,他们给Redis加了密码,还限制了只允许内网访问,再也没出过事。
运维说:“要不是这次,我都不知道Redis还能被用来挖矿。”
最后一句
被挖矿不可怕,可怕的是不知道被挖,更可怕的是清理完没有补漏洞。
今天去检查你的服务器:top看一眼CPU,crontab -l看一眼定时任务,cat /root/.ssh/authorized_keys看一眼公钥。10分钟做完,比中招后再清理省事得多。
如果你发现自己的服务器在替别人挖矿,别慌。按这三步走,清理干净,堵上漏洞,下次他就进不来了。




