部署网站防篡改系统实时监控文件变更

核心答案:部署网站防篡改系统实时监控文件变更

部署网站防篡改系统常用的方法是利用 Linux 内核的 inotify 机制,安装 inotify-tools 后编写脚本监控网站目录的文件新建、修改和删除事件,并记录日志或触发报警(例如邮件、钉钉通知)。
本文以 CentOS 7/Ubuntu 20.04 为例,从安装、配置到自启动与效果验证,让零基础用户也能自己搭建一套轻量的实时文件监控方案。

适用场景与准备条件

这套方案适合个人或企业网站运行在 Linux 服务器上的场景,尤其当网站采用 CMS(如 WordPress、织梦)时,文件容易被非法写入后门。
你需要:

  • 一台已连接公网的 Linux 服务器(CentOS 7+ 或 Ubuntu 16.04+),有 root 或 sudo 权限。
  • 知道你的网站根目录路径(例如 /var/www/html)。
  • 至少会使用 SSH 客户端(Putty、Terminal)登录服务器。

分步操作:从安装到配置报警

第一步:安装 inotify-tools

# CentOS 系列
yum install -y epel-release
yum install -y inotify-tools

# Ubuntu/Debian 系列
apt update && apt install -y inotify-tools

安装完成后,执行 inotifywait --help 能看到参数说明即成功。

第二步:编写实时监控脚本

创建一个脚本文件 /root/monitor_website.sh,内容如下(请将网站目录和日志路径替换为你的实际值):

#!/bin/bash
# 监控目录
WATCH_DIR="/var/www/html"
# 日志文件
LOG_FILE="/var/log/website_change.log"
# 排除不需要监控的目录(比如缓存、日志),用正则写法,多个用 | 分隔
EXCLUDE="\.(cache|log|tmp)$"

inotifywait -mrq --format '%w%f %e %T' --timefmt '%Y-%m-%d %H:%M:%S' \
  --exclude "$EXCLUDE" \
  -e create,modify,delete,move \
  "$WATCH_DIR" | while read line; do
  echo "$(date) - $line" >> "$LOG_FILE"
  # 这里可以添加报警命令,例如通过 curl 发送到钉钉或邮件
  # curl -s -X POST "你的钉钉机器人地址" -H 'Content-Type: application/json' ...
done

保存后赋予执行权限:chmod +x /root/monitor_website.sh

第三步:设置脚本开机自启

使用 systemd 管理,保证服务器重启后自动运行。

创建服务文件 /etc/systemd/system/monitor-website.service

[Unit]
Description=Website File Change Monitor
After=network.target

[Service]
ExecStart=/root/monitor_website.sh
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

然后执行:

systemctl daemon-reload
systemctl enable monitor-website
systemctl start monitor-website

检查服务状态:systemctl status monitor-website,应为 active (running)。

避坑指南:减少误报与性能消耗

  • 监控范围不要过大:只监控包含可执行文件、模板、PHP 脚本等关键目录,排除 uploads 下的图片目录(除非图片被恶意改名),避免大量写操作造成日志暴涨。
  • 调整 inotify 参数:如果网站文件数超过默认的 inotify 监控上限,可以修改 /etc/sysctl.conf 中的 fs.inotify.max_user_watches,建议设为 524288 并执行 sysctl -p
  • 报警频率限制:如果文件频繁变动(比如日志写入),建议在脚本内增加时间窗口去重,防止告警轰炸。

效果验证与常见问题

验证方法

手动在网站目录下新建一个测试文件:touch /var/www/html/test_change.txt,然后查看日志:

tail -f /var/log/website_change.log

你应该能看到类似 2025-03-25 14:30:00 - /var/www/html/test_change.txt CREATE 的记录。

常见问题解答(FAQ)

Q1:监控脚本运行后服务器负载变高怎么办?
A:检查是否监控了日志或缓存目录,使用 --exclude 排除;如果文件数量极大,可缩小监控目录范围。

Q2:如何收到实时告警?
A:在脚本的 while 循环中添加调用钉钉、企业微信机器人 API 或发送邮件(如 mail 命令)的命令即可,具体 URL 请参考各平台文档。

Q3:文件被篡改后能自动恢复吗?
A:本文脚本只记录和报警。若要自动恢复,可在收到 modifydelete 事件时执行 rsync 或 cp 从备份目录还原,但需确保备份目录不被监控。

Q4:Ubuntu 下安装 inotify-tools 提示找不到包?
A:先更新源 apt update,如果依然没有,尝试安装 inotify-tools-git 或从源码编译(但更推荐使用 Ubuntu 官方源)。

写在最后

部署这套实时文件监控系统后,建议每周检查一次日志,及时处理异常。
如果你使用的是云服务器厂商自带的防篡改服务或宝塔面板插件,也能实现类似效果,但 inotify 方案更轻量且完全可控。
文中出现的命令和配置都经过实际测试,你可以放心复制使用。
需要进一步了解服务器安全加固,可以继续阅读本博客的 Linux 安全系列文章。

分享到:
上一篇
宝塔自动化脚本批量绑定站点SSL证书:零基础操作指南
下一篇
Nginx修复老旧TLS协议拦截浏览器访问
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意