在当今复杂的网络环境中,系统安全是每一位Linux管理员不可忽视的核心议题,CentOS 7作为一款广泛使用的企业级操作系统,内置了强大的审计功能,它如同飞机的“黑匣子”,能够详细记录系统中发生的各类事件,为安全审计、合规性检查和故障排查提供了坚实的数据基础,本文将深入探讨CentOS 7的audit功能,从其核心组件、规则配置到日志分析,全面展示如何利用这一工具来加固系统安全。
审计系统的核心组件
CentOS 7的审计功能主要由auditd包提供,它包含了一组协同工作的工具,共同构成了完整的审计体系,理解这些组件的功能是有效使用审计功能的第一步。
组件名称 | 功能描述 |
---|---|
auditd | 审计守护进程,负责接收内核传递的审计事件,并将其写入日志文件,它是整个审计系统的核心。 |
auditctl | 审计控制工具,用于与内核的审计子系统进行交互,管理员可以使用它来添加、删除或查看审计规则,并控制审计系统的状态。 |
ausearch | 审计日志查询工具,允许管理员根据各种条件(如时间、用户、事件类型、文件名等)在审计日志中搜索特定事件。 |
aureport | 审计报告生成工具,能够根据审计日志生成汇总性的报告,例如用户登录报告、文件访问报告、系统调用报告等,便于快速了解系统活动概况。 |
audispd | 审计事件分发器,可以将审计事件实时发送给其他应用程序进行处理,例如与SIEM(安全信息和事件管理)系统集成。 |
审计日志默认存储在/var/log/audit/audit.log
文件中,该文件以二进制格式存储,不能直接用cat
或vim
等工具查看,必须使用ausearch
或aureport
等专用工具进行解析。
配置与管理审计规则
审计规则是定义“记录什么”的关键,规则可以分为两类:临时规则和永久规则,临时规则通过auditctl
命令直接添加,系统重启后失效;永久规则则写入配置文件,重启后自动加载。
安装与启动
确保auditd服务已安装并运行。
# 安装auditd包(通常默认已安装) sudo yum install audit # 启动服务并设置开机自启 sudo systemctl start auditd sudo systemctl enable auditd
定义审计规则
审计规则主要分为三类:控制规则、文件系统监控规则和系统调用规则。
文件系统监控规则
这是最常用的一类规则,用于监控特定文件或目录的访问、修改、执行等操作。监控
/etc/passwd
文件的写操作和属性变更:这是监控敏感文件变更的典型例子。# -w 表示监控文件或目录,-p 指定权限,-k 添加一个便于搜索的“键” sudo auditctl -w /etc/passwd -p wa -k passwd_changes
-w /etc/passwd
: 监控路径。-p wa
: 监控权限,w
代表写,a
代表属性变更。-k passwd_changes
: 为这条规则设置一个关键字,方便后续在日志中快速定位。
监控
/var/www/html/
目录下的所有删除操作:用于保护Web目录不被恶意篡改。sudo auditctl -w /var/www/html/ -p r -k web_access sudo auditctl -w /var/www/html/ -p a -k web_attr_change sudo auditctl -w /var/www/html/ -p w -k web_write sudo auditctl -w /var/www/html/ -p x -k web_execute
系统调用监控规则
这类规则更为底层,可以监控特定进程或用户执行的系统调用。- 监控所有用户对
chmod
和chown
系统调用的使用:# -a always,exit 表示始终在系统调用退出时记录 # -F arch=b64 指定架构为64位 # -S chmod, chown 指定要监控的系统调用 sudo auditctl -a always,exit -F arch=b64 -S chmod,chown -k perm_changes
- 监控所有用户对
永久规则
为了让规则在重启后依然生效,需要将它们写入/etc/audit/rules.d/
目录下以.rules
结尾的文件中,创建/etc/audit/rules.d/my_audit.rules
文件,并将上述规则写入其中。# 编辑规则文件 sudo vi /etc/audit/rules.d/my_audit.rules
示例:
-w /etc/passwd -p wa -k passwd_changes -w /var/www/html/ -p wa -k web_dir_changes -a always,exit -F arch=b64 -S chmod,chown -k perm_changes
写入后,使用
augenrules
命令加载所有规则文件中的规则,并重启auditd
服务。sudo augenrules --load sudo systemctl restart auditd
日志查询与分析
配置好规则后,系统会根据规则记录事件,接下来就是如何从海量的日志中提取有价值的信息。
使用ausearch进行查询
ausearch
是分析日志的利器,以下是一些常用示例:
根据关键字查询:查找所有与
passwd_changes
相关的事件。ausearch -k passwd_changes
根据用户ID查询:查询UID为1000的用户在最近一小时内的所有活动。
ausearch -ui 1000 -ts recent
根据文件名查询:查询所有与
/etc/shadow
文件相关的事件。ausearch -f /etc/shadow
查询失败的事件:查找所有失败的登录尝试。
ausearch -m LOGIN -ts recent -sv no
使用aureport生成报告
aureport
可以生成更直观的汇总报告。
生成登录摘要报告:
aureport -l
生成文件访问摘要报告:
aureport -f
生成最近24小时的认证事件报告:
aureport -au -ts yesterday
最佳实践与注意事项
- 日志管理:审计日志会占用大量磁盘空间,在
/etc/audit/auditd.conf
配置文件中,可以设置max_log_file
(单个日志文件最大大小)、num_logs
(保留的日志文件数量)和space_left_action
(磁盘空间不足时的操作,如发送邮件或暂停审计)。 - 规则粒度:审计规则并非越多越好,过于细粒度的规则(如监控所有
open
系统调用)会产生海量日志,影响系统性能,并增加分析难度,应聚焦于关键文件、目录和敏感操作。 - 日志安全:审计日志本身是攻击者的目标,应确保
/var/log/audit/
目录的权限严格,只允许root用户访问,对于高安全要求的系统,建议将审计日志实时转发到远程、安全的日志服务器上,防止本地日志被篡改或删除。
相关问答FAQs
问题1:我的审计日志文件(audit.log)增长太快,占满了磁盘空间,该怎么办?
解答: 这是一个常见问题,可以通过调整auditd
的配置来解决,编辑主配置文件/etc/audit/auditd.conf
,你可以调整以下几个关键参数:
max_log_file
: 设置单个日志文件的最大容量,max_log_file = 50
(MB)。num_logs
: 设置轮转后保留的日志文件数量,num_logs = 5
。space_left_action
: 当磁盘剩余空间低于某个阈值(由space_left
定义)时执行的动作,可以设置为syslog
(发送系统日志)、email
(发送邮件,需配置)或suspend
(暂停审计,避免磁盘写满)。admin_space_left_action
: 当空间进一步减少时,可以设置为single
(切换到单用户模式)或halt
(关机),以保护系统。
修改配置后,执行 sudo systemctl restart auditd
使其生效,定期审查和优化审计规则,移除不必要的监控项,也是控制日志量的根本方法。
问题2:使用-w
监控文件和使用-a
监控系统调用有什么本质区别?我应该如何选择?
解答: 两者的主要区别在于监控的抽象层次和灵活性。
:这是一个高层次、更直观的监控方式,你告诉auditd“关注这个文件/目录”,它会自动关联到所有影响该文件/目录的系统调用(如 open
,write
,unlink
,chmod
等),它简单易用,非常适合监控特定敏感文件(如/etc/passwd
)或重要目录(如/var/www/html
)的访问和变更。:这是一个低层次、更精细的监控方式,你直接指定要监控的系统调用(如 chmod
),这种方式更灵活,因为它可以附加更多过滤条件,例如只监控特定用户(-F uid=0
)、特定进程(-F exe=/usr/bin/sudo
)或特定返回值(-F success=-1
表示失败)的系统调用。
如何选择?
- 当你的目标是保护特定数据文件或目录时,优先使用
-w
,它更直接,配置简单。 - 当你的目标是追踪某种特定的系统行为,而不管它影响了哪个文件时,应使用
-a
,你想监控所有由root用户执行的chmod
操作,或者追踪所有失败的fork
系统调用,这时-a
是唯一的选择。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复