Linux审计系统核心是通过内核级auditd服务监控系统调用与文件访问,利用auditctl定义规则,记录关键事件至/var/log/audit/audit.log,实现进程启动、文件操作等行为的细粒度追踪与分析。

在Linux中进行进程审计和跟踪,核心在于利用Linux自带的
auditd
auditctl
要开始在Linux中审计进程,你需要做的是安装并配置
auditd
auditctl
安装auditd
sudo yum install audit -y # 或者对于较新的系统 sudo dnf install audit -y
在基于Debian的系统(如Ubuntu, Debian)上:
sudo apt update sudo apt install auditd audispd-plugins -y
启动并启用auditd
sudo systemctl enable auditd sudo systemctl start auditd
确认服务状态:
sudo systemctl status auditd
配置审计规则: 这是核心部分。你可以使用
auditctl
auditd
/etc/audit/audit.rules
/etc/audit/rules.d/
清空现有规则(谨慎操作,这会移除所有当前加载的规则):
sudo auditctl -D
添加基本审计规则示例:
监控所有可执行程序的启动:
sudo auditctl -a always,exit -F arch=b64 -S execve -k process_exec sudo auditctl -a always,exit -F arch=b32 -S execve -k process_exec
这里,
-a always,exit
-F arch=b64
-F arch=b32
execve
-S execve
-k process_exec
监控特定文件或目录的访问(读、写、执行、属性更改):
sudo auditctl -w /etc/passwd -p rwxa -k passwd_access sudo auditctl -w /var/log/myapp/ -p rwxa -k myapp_log_changes
-w /path/to/file_or_dir
-p rwxa
r
w
x
a
监控特定用户执行的操作:
sudo auditctl -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -k user_file_ops
-F auid=1001
保存规则: 将上述
auditctl
/etc/audit/rules.d/99-custom.rules
.rules
auditd
# /etc/audit/rules.d/99-custom.rules -D # 清除所有规则,确保从头开始 -a always,exit -F arch=b64 -S execve -k process_exec -a always,exit -F arch=b32 -S execve -k process_exec -w /etc/passwd -p rwxa -k passwd_access -w /var/log/myapp/ -p rwxa -k myapp_log_changes -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -k user_file_ops # 确保在文件末尾添加以下行,以使规则持久化并在系统重启后生效 -e 2
然后重启
auditd
sudo systemctl restart auditd
查看和分析审计日志: 审计日志通常存储在
/var/log/audit/audit.log
ausearch
autrace
使用ausearch
sudo ausearch -k process_exec sudo ausearch -k passwd_access sudo ausearch -k user_file_ops --start today
--start today
使用ausearch
sudo ausearch -m SYSCALL -sv yes # 搜索所有成功的系统调用事件 sudo ausearch -auid 1001 # 搜索特定用户ID的操作 sudo ausearch -ts 08/01/2023 00:00:00 -te 08/01/2023 23:59:59 # 搜索特定时间范围内的事件
使用autrace
autrace
sudo autrace -r /bin/ls -l /tmp
这会生成一个详细的审计报告,显示
ls
Linux审计系统,也就是我们常说的
auditd
如果事件符合某个审计规则,内核就会生成一个审计记录。这些记录不会直接写入文件,而是先发送给一个用户空间的守护进程——
auditd
auditd
/var/log/audit/audit.log
这个过程中,最关键的在于它的事件驱动和规则引擎。所有的审计都是基于系统调用(syscalls)的,这是操作系统与应用程序交互的底层接口。通过监控这些系统调用,
auditd
对我来说,
auditd
配置
auditd
1. 跟踪特定进程的启动:
要跟踪进程启动,我们主要关注
execve
跟踪所有可执行程序的启动:
sudo auditctl -a always,exit -F arch=b64 -S execve -k program_execution sudo auditctl -a always,exit -F arch=b32 -S execve -k program_execution
这里我用了
program_execution
跟踪特定路径下程序的启动: 如果你只想关注
/usr/local/bin/
sudo auditctl -a always,exit -F arch=b64 -S execve -F dir=/usr/local/bin/ -k local_bin_exec
注意,
-F dir=
execve
path
inode
跟踪特定用户的程序启动:
sudo auditctl -a always,exit -F arch=b64 -S execve -F auid=1001 -k user_program_exec
auid
2. 跟踪文件访问:
文件访问的审计则更侧重于文件路径和操作类型(读、写、执行、属性更改)。
监控关键配置文件(如/etc/ssh/sshd_config
sudo auditctl -w /etc/ssh/sshd_config -p rwxa -k sshd_config_access
-p rwxa
rw
监控特定目录下所有文件的写操作:
sudo auditctl -w /var/www/html/ -p wa -k web_root_write
这会监控
/var/www/html/
监控特定用户对文件的写操作:
sudo auditctl -a always,exit -F arch=b64 -S open,creat,truncate,ftruncate,unlink,unlinkat -F auid=1001 -F dir=/home/user1/docs/ -p wa -k user1_doc_write
这里结合了系统调用(
open
creat
一些个人经验:
配置规则时,我发现最容易犯的错误就是规则过于宽泛,导致日志量暴增,很快就占满了磁盘空间,而且查找有用的信息变得异常困难。例如,一开始就监控整个
/bin
execve
/var
-k
ausearch
审计日志文件
/var/log/audit/audit.log
audit_id
serial
日志条目结构:
一个典型的审计日志条目可能包含以下字段:
type=
SYSCALL
CWD
path
PROCTITLE
msg=
audit_id
pid
comm
exe
SYSCALL
success
exit
a0-a3
auid
uid
gid
name=
inode=
dev=
path
key=
-k
解读和分析的工具:
直接
cat
grep
/var/log/audit/audit.log
auditd
ausearch
按键值搜索:
sudo ausearch -k passwd_access
这会显示所有与
passwd_access
按时间范围搜索:
sudo ausearch --start 08/01/2023 09:00:00 --end 08/01/2023 10:00:00 sudo ausearch --start today sudo ausearch --start boot
时间格式很重要,通常是
MM/DD/YYYY HH:MM:SS
按用户ID搜索:
sudo ausearch -auid 1000 # 审计用户ID sudo ausearch -uid 0 # 实际用户ID为root
按事件类型和成功状态搜索:
sudo ausearch -m SYSCALL -sv no # 搜索所有失败的系统调用
组合条件搜索:
sudo ausearch -k web_root_write -sv no --start yesterday
这会查找昨天所有对
web_root
将输出格式化为可读性更高的形式:
sudo ausearch -k program_execution | less
ausearch
aureport
aureport
汇总所有事件:
sudo aureport
按用户汇总:
sudo aureport -u
按可执行程序汇总:
sudo aureport -x
按失败事件汇总:
sudo aureport --failed
autrace
autrace
我的经验谈:
刚开始接触
auditd
ausearch
audit_id
-k
ausearch
grep
awk
ausearch
SYSCALL
CWD
path
CWD
SYSCALL
在Linux审计系统中,规则的持久化和性能考量是两个非常实际且重要的问题。忽视其中任何一个,都可能导致审计系统无法达到预期效果,甚至对系统稳定性产生负面影响。
审计规则的持久化:
你通过
auditctl
auditd
配置文件位置: 在大多数现代Linux发行版上,
auditd
/etc/audit/rules.d/
.rules
/etc/audit/audit.rules
.rules
99-custom.rules
文件内容: 配置文件中的规则语法与
auditctl
# /etc/audit/rules.d/99-custom.rules -D # 这一行非常重要,它会在加载新规则前清除所有现有规则 -a always,exit -F arch=b64 -S execve -k process_exec -w /etc/passwd -p rwxa -k passwd_access # ... 其他规则 -e 2 # 这一行也至关重要,它设置审计系统为启用状态,并且不可更改规则
-D
-e 2
auditctl
激活持久化规则: 编辑完规则文件后,你需要重启
auditd
sudo systemctl restart auditd
你也可以使用
sudo auditctl -R /etc/audit/rules.d/99-custom.rules
性能考量:
审计系统在内核层面运行,理论上效率很高,但配置不当仍然可能导致显著的性能开销。
规则的数量和复杂度: 规则越多,内核在处理每个事件时需要匹配的模式就越多,这会增加CPU的负担。过于复杂的规则(例如,包含大量正则表达式或多个
&&
审计范围: 最常见的性能问题源于审计范围过大。例如,监控整个
/
auditd
auditd.conf
/etc/audit/auditd.conf
num_logs
max_log_file
max_log_file_action
ROTATE
KEEP_LOGS
SUSPEND
flush
INCREMENTAL
以上就是如何在Linux中进程审计 Linux audit进程跟踪的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号