Linux 文件篡改审计(auditctl 实战指南)

Linux 文件篡改审计(auditctl 实战指南)

在服务器安全中,仅仅"禁止修改文件"(例如 chattr +i)是不够的。

更重要的是:

当文件被修改时,能够知道是谁(进程 / 用户)在什么时候改了什么文件。

本文介绍如何使用 Linux 内核审计工具

👉 auditd

实现文件篡改监控。

一、核心命令

基础规则(推荐写法)

auditctl -a always,exit -F arch=b64 -F dir=/demo -F perm=wa -k filewatch

参数说明

-a always,exit → 在系统调用结束时记录日志

-F arch=b64 → 64位系统调用(必须加,否则性能差且可能漏日志)

-F dir=/demo → 监控目录(递归)

-F perm=wa → 监控 写(write) + 属性(attribute)

-k filewatch → 日志标签

二、效果演示

1)创建测试文件

mkdir /demo

echo "hello" > /demo/test.txt

2)修改文件

echo "hack" >> /demo/test.txt

3)查看审计日志

ausearch -k filewatch -i

4)示例输出(精简版)

type=SYSCALL ... syscall=openat ... comm=bash exe=/usr/bin/bash

type=PATH ... name=/demo/test.txt

日志含义

comm=bash → 执行修改的进程

exe=/usr/bin/bash → 程序路径

name=/demo/test.txt → 被修改的文件

如果出现:

O_RDWR|O_CREAT|O_TRUNC

说明:

👉 文件被打开并且清空后重写

三、查看规则

auditctl -l

示例:

-a always,exit -F arch=b64 -F dir=/demo -F perm=wa -F key=filewatch

四、删除规则

删除单条规则(旧写法)

auditctl -W /demo -p wa -k filewatch

清空所有规则(慎用)

auditctl -D

五、进阶用法

1)捕获更多修改行为

auditctl -a always,exit -F arch=b64

-S open,openat,rename,unlink,truncate

-F dir=/demo

-k filewatch_detail

可监控:

文件写入

重命名

删除

覆盖

2)只关注写操作

auditctl -a always,exit -F arch=b64

-S open,openat

-F dir=/demo

-k filewatch_open

重点看 flags:

O_WRONLY

O_RDWR

O_TRUNC

O_CREAT

3)只监控某个进程(推荐)

例如只监控 PHP:

auditctl -a always,exit -F arch=b64

-S open,openat

-F exe=/usr/sbin/php-fpm

-k php_write

六、查看日志(常用命令)

ausearch -k filewatch -i

查看最近:

ausearch -k filewatch -ts recent -i

查看今天:

ausearch -k filewatch -ts today -i

七、性能建议

⚠️ 审计是同步记录,规则不当会影响性能

建议:

❌ 不要监控整个系统

❌ 不要监控高频写目录

✅ 只监控核心代码目录

✅ 使用 key 分类日志

八、安全能力总结

能力 支持

记录谁改文件 ✅

记录进程路径 ✅

记录具体文件 ✅

阻止修改 ❌

九、防篡改最佳实践

  1. chattr +i → 防止关键文件被改
  2. auditd → 记录谁改
  3. AIDE → 定期完整性检测
  4. 日志远程备份 → 防止被删除
相关推荐
叶帆8 小时前
【YFIOs】Docker方式部署
运维·docker·容器
小猿姐8 小时前
Clickhouse Kubernetes Operator 实测:哪种方案更适合生产?
运维·数据库·kubernetes
谙弆悕博士9 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
彩色的黑'''9 小时前
[root@localhost ~]#,Linux系统的命令提示符为啥现在变成-bash-4.2#了,哪里设置的
linux·运维·bash
树下水月9 小时前
文件分片上传接口(Easyswoole)被nginx拦截,并返回状态码400和408的抓包排查过程
运维·nginx
源远流长jerry9 小时前
Linux 网络发送机制深度解析:从应用到网线
linux·服务器·网络·网络协议·tcp/ip
南境十里·墨染春水10 小时前
linux学习进展 shell编程
linux·运维·学习
goyeer10 小时前
【ITIL4】32服务实践 - 问题管理(Problem Management)
linux·运维·服务器·企业数字化·it管理·itil·it治理
怀旧,11 小时前
【Linux网络编程】8. 网络层协议 IP
linux·网络·tcp/ip
RH23121111 小时前
2026.5.12 Linux
java·linux·数据结构