挂马攻击不仅会导致系统资源被大量消耗,还可能成为进一步入侵和数据泄露的跳板。硬盘被快速占满的表现通常是网站访问异常、日志不断增加、应用缓存膨胀、服务器负载攀升,甚至出现磁盘 IO 高企、数据库写入失败、服务异常中断等问题。这种情况如果不能快速定位并清理,不仅会影响业务运行,还可能对网站信誉和用户数据安全造成严重损害。因此,掌握系统化、专业的排查方法对于运维人员至关重要。
首先,确认服务器硬盘快速增长的症状与范围是排查的前提。通过命令查看磁盘使用情况是最基础的手段,例如:
df -h
此命令能够显示各挂载点的已用空间、可用空间及挂载路径,帮助快速定位异常分区。结合 du 命令可以进一步分析具体目录的占用情况:
du -sh /* 2>/dev/null
若发现某个目录的空间异常增大,例如 /www/wwwroot/、/tmp 或 /var/log,则说明恶意脚本可能在该路径下持续写入文件。由于挂马攻击通常会生成大量临时文件、日志或缓存文件,快速识别增长最快的目录是后续分析的关键。
在确认异常目录后,需要进一步找到具体消耗空间的文件。可以使用以下命令列出大小排名前十的文件:
find /www/wwwroot -type f -exec du -h {} + | sort -rh | head -n 10
通过文件大小、创建时间以及修改时间,可以判断文件是否为近期生成。如果发现大量名称可疑、无规律、带有随机字符或伪装成系统文件的文件,几乎可以断定这些文件由挂马生成。此外,恶意脚本常以 PHP、JS、GIF、TXT、LOG 等形式存放,有时会以隐藏文件(.开头)存在,因此需要加上 -name ".*" 选项排查隐藏文件:
find /www/wwwroot -type f -name ".*" -exec ls -lh {} \;
通过比对文件内容与哈希值,可以进一步判断文件是否为已知恶意程序。常见方法是查看文件头,判断是否存在 PHP eval、base64_decode、gzinflate、str_rot13 等典型挂马特征。例如:
grep -rE "eval|base64_decode|gzinflate|str_rot13" /www/wwwroot
这一操作可以快速定位带有恶意执行代码的文件。
除了静态文件分析,运行中的进程也可能在不断生成垃圾文件或写入日志,从而造成磁盘迅速占满。使用 lsof 可以查看被打开但仍占用磁盘空间的文件:
lsof | grep deleted
这类文件通常已经被删除,但进程仍然保持文件句柄,因此磁盘空间不会回收。找到对应进程后,通过重启或杀死进程即可释放空间。例如 PHP-FPM、Nginx Worker、Node.js 服务等都可能存在此类情况。
对于 Web 服务器而言,挂马攻击的常见路径包括 /www/wwwroot/、上传目录、缓存目录和临时目录,因此排查这些目录的写入权限、文件数量及文件类型非常重要。使用 find 结合修改时间,可以筛选出最近 24 小时内生成的文件:
find /www/wwwroot -type f -mtime -1
通过分析文件类型和大小变化趋势,可以初步判断攻击是否仍在持续,是否为自动化脚本生成的批量文件。
日志也是磁盘快速占满的重要来源,尤其是在挂马导致的异常请求频繁触发错误日志时。例如 Nginx、Apache、PHP 错误日志可能在短时间内从几十 MB 膨胀到数十 GB。可以使用以下命令查看日志占用空间:
du -sh /www/wwwlogs/*
一旦发现异常日志文件,可以临时清理或压缩,同时查明产生日志的来源。例如通过 Nginx 的 access.log 记录,可以发现异常请求频率最高的 IP 或 URI:
awk '{print $1}' /www/wwwlogs/access.log | sort | uniq -c | sort -nr | head -n 20
通过分析异常访问源,能够阻断恶意脚本的持续执行。
除了文件与日志分析外,还需要对数据库进行检查。挂马脚本常通过 SQL 注入或远程执行写入大量无用数据,导致数据库文件迅速膨胀,尤其是 MySQL 的 ibdata1、binlog 或数据库缓存目录。如果发现数据库文件占用异常,可使用 MySQL 查询表记录数和表大小:
SELECT table_schema, table_name, data_length+index_length
FROM information_schema.tables
ORDER BY data_length+index_length DESC
LIMIT 20;
确认异常表后,可以备份重要数据,清理或优化表空间,并检查应用是否存在被挂马操作的漏洞入口。
在排查文件、日志、进程和数据库之后,网络层也可能存在异常访问。例如,恶意脚本可能通过后台发送大量 HTTP 请求或外部数据,导致缓存文件、日志文件膨胀。通过 netstat -ntlp 或 ss -ntlp 查看当前监听端口及连接数,可以发现异常流量源:
netstat -ntlp
ss -s
结合异常 IP 黑名单或防火墙规则,可以及时阻断攻击源。
完成以上排查后,必须清理挂马文件及恢复系统环境。建议操作流程包括:备份重要文件与数据库、彻底删除恶意文件、清理被占用空间、重新生成缓存目录、重启关键服务。为防止同类攻击重复发生,需要强化服务器安全措施,包括关闭不必要的写入权限、限制上传目录权限、定期扫描 Web 文件、部署 WAF(Web Application Firewall)、升级应用程序及插件版本、设置自动日志轮转和磁盘告警。
对于长期维护,可以使用脚本定期扫描网站目录中带有 eval、base64_decode 等特征的文件:
grep -r --include=*.php "eval(base64_decode" /www/wwwroot/
并结合 inode、文件大小和修改时间,生成告警或自动隔离机制。同时,应定期备份重要数据,设置磁盘监控阈值,避免因硬盘快速占满导致业务中断。
总体来看,网站服务器被挂马导致硬盘快速占满的问题具有高度隐蔽性和破坏性,需要从文件系统、日志、进程、数据库和网络多个维度进行排查。通过系统化的分析和专业手段,不仅能够快速定位恶意文件与异常占用,还能够恢复服务器正常运行,并在未来建立防御机制,避免类似问题反复发生。运维人员在面对这一问题时,应充分理解攻击方式、磁盘占用机理以及文件系统管理方法,形成完整的排查流程,这样才能在保证业务连续性的前提下,有效应对挂马攻击及其带来的硬盘占满风险。