网站文件完整性校验,md5sum监控文件改动

网站被挂马、配置被误改、代码被篡改,这类问题往往在访问异常后才被发现。
用 md5sum 给网站文件建立一份“指纹基线”,再定期比对,就能快速发现哪些文件被改动。
本文面向零基础用户,从生成基线到定时监控、定位异常文件,一步步给出可直接执行的命令。

先理解 md5sum 能做什么

md5sum 会为每个文件计算一个固定长度的 MD5 值,文件内容只要发生一个字节的变化,这个值就会不同。
它不判断文件好坏,只回答一个问题:这个文件和之前相比,内容有没有变。

适合监控的场景包括:

  • 网站程序目录,例如 /www/wwwroot/你的站点
  • 关键配置文件,例如 Nginx、PHP 的配置文件
  • 上传目录中不应被写入脚本的敏感位置

需要注意,MD5 属于校验值,用于发现改动足够实用,但不要把它当成加密或防篡改签名。

生成第一份文件指纹基线

先进入网站根目录,生成一份包含所有文件 MD5 的清单:

cd /www/wwwroot/example
find . -type f -print0 | xargs -0 md5sum > /root/site_baseline.md5

执行后查看结果:

head /root/site_baseline.md5
wc -l /root/site_baseline.md5

如果能看到类似 d41d8cd98f00b204e9800998ecf8427e ./index.php 的行,说明基线生成成功。
建议把这份文件保存到网站目录之外,避免被一起改掉。

定期比对并找出改动文件

每次检查时重新计算当前指纹,再和基线比对:

cd /www/wwwroot/example
find . -type f -print0 | xargs -0 md5sum > /tmp/site_current.md5
diff /root/site_baseline.md5 /tmp/site_current.md5

没有输出表示文件没有变化;
有输出时,< 开头是基线中的旧值,> 开头是当前值。
想看更直观的差异,可以用:

diff -u /root/site_baseline.md5 /tmp/site_current.md5 | less

如果只想列出新增或删除的文件,可以对比文件名:

comm -3 <(awk '{print $2}' /root/site_baseline.md5 | sort) <(awk '{print $2}' /tmp/site_current.md5 | sort)

放进定时任务,自动发现异常

手动比对适合排查,长期监控建议交给 cron。
新建脚本 /root/check_site.sh:

#!/bin/bash
cd /www/wwwroot/example || exit 1
find . -type f -print0 | xargs -0 md5sum > /tmp/site_current.md5
diff /root/site_baseline.md5 /tmp/site_current.md5 > /tmp/site_diff.log
if [ -s /tmp/site_diff.log ]; then
  echo "网站文件发生改动,时间:$(date)" >> /var/log/site_integrity.log
  cat /tmp/site_diff.log >> /var/log/site_integrity.log
fi

赋予执行权限并加入定时任务:

chmod +x /root/check_site.sh
crontab -e

加入一行,例如每天凌晨 3 点检查:

0 3 * * * /root/check_site.sh

之后查看日志:

tail -f /var/log/site_integrity.log

有新增内容时,说明有文件被改动,需要人工确认是正常更新还是异常篡改。

容易踩的坑和判断建议

  • 基线文件不要放在被监控目录内,否则每次比对都会把自己算进去。
  • 网站正常发版、更新插件后,要重新生成基线,否则会产生大量误报。
  • 上传目录、缓存目录、日志目录如果频繁变化,建议先排除,例如在 find 后加 -path './cache' -prune -o 之类的过滤。
  • 发现改动后先确认改动时间、文件路径和内容,再决定是否还原,不要直接覆盖。
  • 如果服务器上有多个站点,建议每个站点单独建基线和日志,便于定位。

验证监控是否生效

可以主动制造一次小改动来测试:

echo "test" >> /www/wwwroot/example/test.txt
/root/check_site.sh
tail /var/log/site_integrity.log

如果日志里出现 test.txt 相关差异,说明监控链路正常。
测试完成后删除该文件,并重新生成基线。

判断标准:日志无输出代表文件未变;
日志出现差异行,代表有文件内容或文件列表发生变化,需要人工核对。

常见疑问:

md5sum 能发现所有入侵吗? 不能。
它能发现内容改动,但无法判断改动是否恶意,需要结合访问日志、进程和文件内容一起分析。

网站文件很多会不会很慢? 文件数量大时计算会占用一定 CPU,建议放在低峰期执行,并排除缓存和日志目录。

能不能用其他算法? 可以,sha256sum 强度更高,但计算更慢;
日常监控用 md5sum 已经能发现改动。

发现文件被改怎么办? 先备份当前文件,再对比版本库或备份还原,最后排查入口和权限问题。

网站文件完整性校验不是一次性工作,建立基线、定期比对、确认改动,这三步形成习惯后,很多异常能在造成明显影响前被发现。

分享到:
上一篇
网站被入侵之后溯源,分析访问日志找攻击入口
下一篇
等保三级和二级区别,企业建站需要几级等保
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意