部署网站防篡改系统实时监控文件变更
核心答案:部署网站防篡改系统实时监控文件变更
部署网站防篡改系统常用的方法是利用 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:本文脚本只记录和报警。若要自动恢复,可在收到 modify 或 delete 事件时执行 rsync 或 cp 从备份目录还原,但需确保备份目录不被监控。
Q4:Ubuntu 下安装 inotify-tools 提示找不到包?
A:先更新源 apt update,如果依然没有,尝试安装 inotify-tools-git 或从源码编译(但更推荐使用 Ubuntu 官方源)。
写在最后
部署这套实时文件监控系统后,建议每周检查一次日志,及时处理异常。
如果你使用的是云服务器厂商自带的防篡改服务或宝塔面板插件,也能实现类似效果,但 inotify 方案更轻量且完全可控。
文中出现的命令和配置都经过实际测试,你可以放心复制使用。
需要进一步了解服务器安全加固,可以继续阅读本博客的 Linux 安全系列文章。