Linux Audit系统:实现安全审计的核心机制
Linux系统通过Audit框架(内核空间与用户空间协同)实现全面的安全审计,覆盖系统调用、文件访问、进程活动等关键事件,为安全事件追溯、合规性检查提供基础。其核心组件包括内核审计子系统(生成/过滤事件)、用户空间工具(配置/管理/分析日志)。
Audit系统的架构分为内核空间与用户空间两部分,二者通过Netlink套接字通信:
内核空间(Audit子系统)
内核通过audit.ko模块实现事件生成与过滤,主要包括:
execve、open),记录调用号、参数、返回值等信息;fsnotify框架监视指定路径的访问(如读、写、执行);fork、exec、exit),记录进程ID、父进程ID、UID/GID等;-w监控路径、-a添加系统调用规则)过滤事件,减少无关日志。struct audit_context(进程审计上下文,存储事件信息)、struct audit_rule(审计规则,定义监控条件)。用户空间工具
用户空间程序负责配置审计规则、接收/存储日志及生成报告,核心工具包括:
auditctl:实时控制审计守护进程(如添加/删除规则、查看规则状态);auditd:审计守护进程,接收内核审计事件,写入日志文件(默认路径/var/log/audit/audit.log);ausearch:根据关键字(如用户、事件类型、时间)查询审计日志;aureport:生成汇总报告(如失败登录次数、文件访问统计);autrace:跟踪指定进程的系统调用(类似strace,但结果写入审计日志)。大多数Linux发行版默认安装auditd(如CentOS/RHEL通过yum install audit,Ubuntu通过apt install auditd)。启动服务并设置开机自启:
systemctl start auditd # 启动auditd服务
systemctl enable auditd # 开机自启
systemctl status auditd # 检查服务状态(应为"active (running)")
验证Audit模块是否加载:
auditctl -s # 查看Audit状态("enabled"表示开启)
审计规则定义了需要监控的事件,通过auditctl命令或/etc/audit/audit.rules文件(永久生效)配置。常见规则示例:
auditctl -w /etc/passwd -p rwxa -k passwd_access # 监控/etc/passwd的读(r)、写(w)、执行(x)、属性变更(a),标签为"passwd_access"
auditctl -a always,exit -F arch=b64 -S execve -k cmd_exec # 监控所有64位系统调用的execve(执行命令),标签为"cmd_exec"
auditctl -w /var/log/secure -p wa -k login # 监控登录日志文件(/var/log/secure)的写入(w)和属性变更(a)
auditctl -a exclude,always -F msgtype=PATH -F success=yes # 排除成功的PATH事件(减少日志噪音)
审计日志存储在/var/log/audit/audit.log(默认路径),可通过以下工具分析:
ausearch -m SYSCALL -ts today # 查看今天的系统调用日志
aureport -i -k # 生成所有标签的汇总报告
aureport -f -i # 生成文件访问报告
aureport -au -i # 生成用户认证报告
ausearch -k passwd_access # 查找标签为"passwd_access"的事件
ausearch -sc execve -ui root # 查找root用户执行的execve事件
审计日志是安全事件的关键证据,需采取措施防止篡改或删除:
chmod 600 /var/log/audit/audit.log # 仅root可读写
chown root:root /var/log/audit/audit.log # 归属root
/etc/audit/auditd.conf,设置日志保留天数(max_log_file_action = ROTATE)和大小(max_log_file = 8,单位MB):/etc/audit/auditd.conf
max_log_file = 8
max_log_file_action = ROTATE
num_logs = 180 # 保留180个日志文件(约180天)
rsync或scp将日志备份到远程服务器(如rsync -avz /var/log/audit/ user@remote:/backup/audit/)。通过aureport或第三方工具(如ELK、Splunk)监控审计日志,设置告警规则(如频繁的失败登录尝试):
aureport -au -i | grep "failed" # 统计失败的用户认证事件
若需实时告警,可配置audispd(Audit事件分发守护进程)将事件转发至监控系统(如通过audisp-remote发送到远程服务器)。
/etc/shadow、/bin目录)。通过上述步骤,Linux Audit系统可实现全面的安全审计,帮助管理员及时发现异常行为(如非法文件访问、未授权命令执行),提升系统安全性。