网站实时防篡改监控后台文件变更记录:网站实时防篡改监控
为什么需要网站实时防篡改监控
网站文件被篡改是很常见的安全问题,比如被植入恶意脚本、修改首页或插入广告。
如果等到用户反馈或搜索引擎提醒才发现,损失已经造成。
实时防篡改监控可以在文件变更的瞬间记录下:谁改的、什么时候改的、改了哪个文件、进程 ID 是什么。
这样无论是排查入侵还是事后溯源,都有据可查。
本文使用的工具是 Linux 自带的 auditd(审计守护进程),它不需要安装额外软件,配置一次就能持续监控网站目录。
所有变更记录都会写入 /var/log/audit/audit.log,配合 ausearch 命令可以快速过滤。
准备工作
- 一台运行 CentOS 7/8 或 Ubuntu 20.04/22.04 的服务器(已安装网站环境,例如 Nginx + PHP 或宝塔面板)。
- 拥有 root 权限或能使用 sudo。
- 明确你要监控的网站根目录,例如
/www/wwwroot/example.com。
在开始前,先用 SSH 登录服务器,执行以下命令确认 auditd 是否已安装:
which auditd
如果没有输出,需要先安装。
安装 auditd(如果未安装)
CentOS / RHEL / Rocky Linux:
sudo yum install audit -y
sudo systemctl enable auditd
sudo systemctl start auditd
Ubuntu / Debian:
sudo apt update
sudo apt install auditd -y
sudo systemctl enable auditd
sudo systemctl start auditd
安装后检查状态:
sudo systemctl status auditd
看到 active (running) 就表示已启动。
配置监控规则:实时记录网站目录文件变更
我们要对网站根目录及其所有子文件和子目录进行监控,记录写和属性修改两类事件。
这里以 /www/wwwroot/example.com 为例,请替换为你的真实路径。
添加一条规则(加入 /etc/audit/rules.d/ 或直接使用 auditctl):
sudo auditctl -w /www/wwwroot/example.com -p wa -k website_monitor
参数说明:
-w:指定监控路径。-p wa:监控权限事件,w表示写(修改内容),a表示属性修改(如权限、时间戳、重命名等)。你也可以根据需要加上r(读)或x(执行),但生产环境一般只监控写和属性。-k website_monitor:给这条规则打一个标签,方便后续过滤日志。
如果你希望规则重启后仍然生效,可以将它写入永久规则文件:
echo "-w /www/wwwroot/example.com -p wa -k website_monitor" | sudo tee -a /etc/audit/rules.d/website.rules
sudo service auditd restart
查看后台文件变更记录
监控规则生效后,任何对网站目录的写或属性修改都会被记录。
查看实时日志可以用:
sudo tail -f /var/log/audit/audit.log | grep website_monitor
如果只查看最近几条记录,可以用 ausearch 命令:
sudo ausearch -k website_monitor --just-one
输出示例:
time->2025-03-28 10:15:32.123 type=SYSCALL msg=audit(1743135332.123:456): arch=c000003e syscall=2 success=yes exit=0 a0=7ffe... a1=2 a2=1 a3=7... items=2 ppid=1234 pid=5678 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="vim" exe="/usr/bin/vim" subj=unconfined key="website_monitor"
关键字段解读:
time:事件发生时间。ppid/pid:父进程和进程 ID。comm:触发命令名称(如 vim、cp、rm)。exe:可执行文件路径。uid:用户 ID(0 为 root)。key:我们设置的标签。- 后面还会有
PATH记录显示具体文件和操作类型。
你也可以通过 aureport 命令生成汇总报告:
sudo aureport -k -i --start today | grep website_monitor
避坑指南
- 监控目录不要过深或过大:如果网站目录包含大量静态文件(如几十万张图片),auditd 会产生海量日志,可能撑爆磁盘。建议只监控关键目录,例如
webroot、wp-content等。 - 定期清理日志:audit.log 默认不会自动轮转,一定要配置 logrotate。在
/etc/logrotate.d/audit中已有默认配置,检查是否开启并调整保留天数。 - 忽略合法操作:如果网站通过 FTP 或面板在线编辑文件,这些操作也会被记录,属于正常行为。你需要通过
comm字段过滤出可疑进程(例如非 Web 服务进程的写操作)。 - 重启后规则丢失:如果使用
auditctl临时添加,重启后会丢失。务必写入/etc/audit/rules.d/下的文件。 - 不要同时监控同一个目录多次:重复规则会导致重复记录,增加日志量。
效果验证
模拟一次篡改操作:在网站根目录新建一个测试文件,然后修改内容:
echo "hacked!" > /www/wwwroot/example.com/test_hack.txt
接着查看日志:
sudo ausearch -k website_monitor -i | grep test_hack
你应该能看到类似下面这样的记录,包含创建和写入的事件:
type=CREATE ... pid=2345 comm="bash" ... path="/www/wwwroot/example.com/test_hack.txt"
type=WRITE ... pid=2345 comm="bash" ... path="/www/wwwroot/example.com/test_hack.txt"
如果实时需要告警,可以结合 audispd 插件发送邮件或对接第三方告警系统,但本文暂不展开。
总结
通过 auditd 实现网站实时防篡改监控,成本低、效果好,尤其适合没有安全面板的 Linux 服务器。
关键在于配置正确的监控路径和权限事件,并养成定期查看日志的习惯。
如果你正在搭建或维护网站,建议尽快按照本文步骤配置一次,记下关键文件变更记录,防患于未然。
遇到异常事件时,优先排查非预期进程,及时溯源修复。