核心业务文件防篡改需构建实时感知+精准报警+可追溯闭环机制,依托chattr+auditd锁定审计、inotifywait目录监控、eBPF内核拦截及标准化报警字段五大措施。

核心业务文件一旦被篡改,往往意味着入侵已发生或权限已被滥用。防篡改不能只靠“事后发现”,必须建立实时感知 + 精准报警 + 可追溯的闭环机制。以下配置思路兼顾实效性与运维可行性,不依赖商业软件,全部基于Linux原生能力或轻量开源工具。
一、用chattr + auditd组合实现关键文件锁定与操作审计
对真正不可修改的核心文件(如/etc/passwd、/etc/shadow、/usr/bin/sudo、业务主程序二进制等),先加不可变属性,再启用内核级审计:
- 执行
sudo chattr +i /etc/passwd锁定文件(注意:修改前需先chattr -i,且该操作会阻止所有写入,包括系统更新) - 配置auditd监控绕过chattr的异常行为:在/etc/audit/rules.d/immutable.rules中添加
-a always,exit -F path=/etc/passwd -F perm=w -k passwd_write-a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec - 重启服务:
sudo augenrules --load && sudo systemctl restart auditd - 报警触发:用
ausearch -k passwd_write | aureport -f -i可快速查到谁、何时、通过哪个进程尝试写入;配合logger或mail脚本,可将匹配结果实时发邮件或写入企业微信机器人
二、用inotifywait + 自定义脚本做目录级变更告警
适用于动态内容较多但结构固定的业务目录(如Web根目录/var/www/html、API配置目录/opt/myapp/conf),不锁死文件,而是监控“谁在什么时候改了什么”:
- 安装
inotify-tools,编写监控脚本/usr/local/bin/monitor-core-dir.sh - 脚本核心逻辑:监听
modify,attrib,move_to,create事件,过滤掉合法进程(如nginx、rsync、部署用户deploy),对非白名单进程的写操作立即记录并报警 - 示例判断片段:
if ! ps -o comm= -p "$PID" 2>/dev/null | grep -qE '^(nginx|rsync|deploy)$'; then<br> echo "$(date): SUSPICIOUS WRITE by PID $PID ($CMD) to $FILE" | logger -t core-file-alert<br> echo "$HOSTNAME $(date): $FILE changed by $(ps -o user= -p $PID)" | mail -s "ALERT: Core file modified" admin@company.com<br>fi
- 用
systemd守护该脚本,确保开机自启、崩溃自动拉起
三、用eBPF实现内核级实时拦截与日志上报
当需要毫秒级响应、防止篡改动作落地时,传统用户态工具已不够用。Linux 5.7+ 内核支持BPF LSM,可用Rust+Aya框架编写轻量eBPF程序:
- 检测
sys_openat和sys_write系统调用,对目标路径(如/etc/cron.*、/var/spool/cron)进行写权限拦截 - 程序在内核中直接返回
-EPERM,攻击者连errno都看不到具体原因,同时将进程名、UID、调用栈(部分)推送到用户态ring buffer - 用户态程序读取ring buffer,格式化为JSON日志,转发至
rsyslog或fluent-bit统一收集,接入ELK或Prometheus Alertmanager实现分级告警 - 优势明显:无延迟、无法绕过、资源开销极低;缺点是需较新内核且需编译部署,适合高安全等级核心节点
四、报警信息必须包含可行动的关键字段
报警本身不是目的,能快速定位、止损才是重点。所有报警输出至少应含以下5项:
- 时间戳(精确到毫秒):避免时区混乱,建议统一UTC
- 被操作文件的绝对路径与inode号:防止硬链接或重命名干扰
- 发起进程的PID、PPID、命令行完整参数(argv[0]及args)
- 操作用户UID/GID及登录终端(tty)或远程IP(若为SSH)
- 触发规则名称(如“cron-dir-write-block”)与匹配的策略ID:便于回溯配置是否生效
不复杂但容易忽略。


















