md5sum文件完整性监控脚本,检测文件改动告警

服务器上的核心配置文件、网站入口文件或脚本,一旦被意外修改或恶意替换,单靠肉眼很难及时发现。
md5sum 文件完整性监控脚本的核心思路是:先为关键文件生成一份 MD5 基准清单,之后定时重新计算并对比,发现不一致就触发告警。
本文面向零基础用户,从基准生成、脚本编写、定时执行到告警验证,给出可直接照做的步骤。

适用场景与准备条件

这套方案适合监控网站根目录、Nginx 配置、SSH 配置、计划任务等不常变动但很关键的文件。
它检测的是内容是否被改动,不能替代杀毒或入侵检测系统,但胜在轻量、易部署。

动手前确认环境满足以下条件:

  • Linux 服务器,已安装 md5sum,绝大多数发行版默认自带,可用 md5sum --version 确认;
  • 有可用的 cron 服务,用于定时执行校验;
  • 准备一个存放基准文件和日志的目录,例如 /opt/fim;
  • 告警方式可选:写入日志、发送邮件,或对接企业微信、钉钉机器人。

先创建目录结构:

mkdir -p /opt/fim
mkdir -p /opt/fim/logs

生成文件指纹基准清单

监控的前提是有一份“正确状态”的参照。
把需要保护的文件或目录列成一个清单,再批量生成 MD5 值。

新建监控列表文件 /opt/fim/files.list:

/etc/passwd
/etc/ssh/sshd_config
/etc/nginx/nginx.conf
/var/www/html/index.php

生成基准清单,逐行读取文件路径并计算 MD5:

while read -r f; do
  [ -f "$f" ] && md5sum "$f"
done < /opt/fim/files.list > /opt/fim/baseline.md5

查看结果确认格式为“MD5 值 + 两个空格 + 文件路径”:

cat /opt/fim/baseline.md5

基准文件生成后应立即备份到安全位置,并设置为只有 root 可读,否则攻击者篡改文件后再更新基准,监控就失去意义:

chmod 600 /opt/fim/baseline.md5

编写校验与告警脚本

脚本要做三件事:重新计算当前 MD5、与基准对比、把差异写入日志并触发告警。
创建 /opt/fim/check.sh:

#!/bin/bash
BASELINE="/opt/fim/baseline.md5"
LOGFILE="/opt/fim/logs/fim.log"
TMP="/opt/fim/current.md5"

# 重新计算当前指纹
while read -r f; do
  [ -f "$f" ] && md5sum "$f"
done < /opt/fim/files.list > "$TMP"

# 对比基准与当前结果
DIFF=$(diff "$BASELINE" "$TMP")
if [ -n "$DIFF" ]; then
  echo "[$(date '+%F %T')] 检测到文件改动:" >> "$LOGFILE"
  echo "$DIFF" >> "$LOGFILE"
  # 邮件告警示例,按实际环境修改收件人
  echo "$DIFF" | mail -s "文件完整性告警" admin@example.com
else
  echo "[$(date '+%F %T')] 校验通过,无改动" >> "$LOGFILE"
fi

赋予执行权限:

chmod +x /opt/fim/check.sh

判断条件很明确:diff 输出为空代表文件未被改动,
输出不为空代表至少有一个文件内容发生变化。
邮件命令需要系统已配置好邮件服务,
没有的话可以先只保留日志,
后续再接入钉钉或企业微信机器人。

配置定时任务与告警验证

用 cron 让脚本按固定频率自动运行。
编辑当前用户计划任务:

crontab -e

加入一行,表示每小时整点执行一次:

0 * * * * /bin/bash /opt/fim/check.sh

保存后确认任务已写入:

crontab -l

验证监控是否真的生效,手动制造一次改动:

echo "# test" >> /etc/nginx/nginx.conf
/opt/fim/check.sh
tail -n 10 /opt/fim/logs/fim.log

日志中出现“检测到文件改动”并列出对应文件,说明脚本工作正常。
确认后把测试改动还原,并重新生成基准清单。

容易踩的坑

  • 基准文件权限过松:baseline.md5 若被普通用户可写,监控形同虚设,务必设为 600 并归属 root。
  • 文件路径含空格:md5sum 输出用两个空格分隔,路径带空格会导致对比错位,建议监控列表不要包含带空格的文件。
  • 新增或删除文件未处理:本脚本只对比清单内文件,新增文件不会触发告警,需要定期维护 files.list。
  • 邮件发不出去:多数云服务器默认未开 25 端口,mail 命令会静默失败,建议优先接入 webhook 告警。
  • cron 环境变量缺失:脚本中尽量使用绝对路径,避免因 PATH 不同导致命令找不到。

常见疑问

监控频率设多少合适? 配置文件类建议每小时或每天一次;
对安全性要求高的核心文件可缩短到 5 至 10 分钟,但要评估服务器负载。

md5sum 和 sha256sum 选哪个? 两者用法一致,sha256sum 抗碰撞能力更强,新部署建议优先使用,只需把脚本中的命令替换即可。

误报太多怎么办? 日志、缓存、临时文件会频繁变动,不要纳入监控列表,只保留稳定且关键的文件。

能监控整个目录吗? 可以,用 find /path -type f -exec md5sum {} \; 生成清单,但文件量大时对比耗时会明显增加。

整套方案的落地顺序就是:列出关键文件、生成基准、编写校验脚本、挂上 cron、制造改动验证告警。
跑通之后,再根据实际环境把邮件告警换成更稳定的机器人通知即可。

分享到:
上一篇
UPS容量计算,服务器断电续航时间测算:UPS容量计算
下一篇
算力机房PUE能耗计算,长期电费成本评估
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 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意