在Ubuntu系统安全体系中,auditd是Linux内核审计子系统的用户态守护进程,它能精确记录文件访问、系统调用、用户行为等关键事件,是入侵检测和数字取证的核心工具。要在Ubuntu上部署auditd并实现文件访问模式监控,核心步骤就是:安装auditd包、编写审计规则、启动服务、分析日志。下面直接把每一步怎么做、为什么这么做、出了问题怎么排查全部讲清楚。
一、为什么Ubuntu安全必须装auditd
很多人觉得Ubuntu自带的syslog够用了,但syslog只能记录应用层日志,无法追踪内核级别的文件读写、权限变更、用户登录等底层行为。auditd直接对接Linux Audit Framework,能捕获到syslog完全看不到的信息:谁在什么时间打开了/etc/passwd、哪个进程修改了/var/www目录下的文件、某个用户执行了哪些敏感命令。一旦发生入侵,这些记录就是取证的第一手证据。对于等保合规、企业内控审计来说,auditd几乎是必选项。
二、Ubuntu上安装auditd的具体操作
Ubuntu 18.04及以上版本默认已经预装了auditd,如果没有或者需要重新安装,执行以下命令:
sudo apt update sudo apt install auditd audispd-plugins
audispd-plugins是审计事件的分发插件,能把审计日志转发到其他分析系统,建议一并装上。安装完成后,确认服务状态:
sudo systemctl status auditd sudo systemctl enable auditd
enable确保开机自启,status确认运行正常。如果显示inactive,用sudo systemctl start auditd手动拉起即可。
三、编写审计规则:监控文件访问的核心配置
auditd的规则文件存放在/etc/audit/rules.d/目录下,主规则文件是/etc/audit/audit.rules。不要直接改audit.rules,而是在rules.d下新建文件,比如:
sudo nano /etc/audit/rules.d/file_monitor.rules
下面是一套实用的文件访问监控规则,逐条解释含义:
# 监控/etc目录下所有文件的读写和属性变更 -w /etc -p rwxa -k etc_changes # 监控/var/www目录(Web根目录)的写操作和属性变更 -w /var/www -p wa -k web_changes # 监控/home目录下所有文件的访问(包括读) -w /home -p r -k home_access # 监控所有用户登录和登出事件 -w /var/log/lastlog -p r -k login_events -w /var/log/faillog -p r -k login_events # 监控/tmp和/var/tmp目录的写操作(临时文件常被利用) -w /tmp -p wa -k tmp_changes -w /var/tmp -p wa -k tmp_changes # 监控关键系统命令是否被执行 -w /usr/bin/sudo -p x -k sudo_exec -w /usr/bin/passwd -p x -k passwd_exec # 监控系统时间被修改(时间篡改是常见攻击手法) -w /etc/localtime -p wa -k time_changes # 监控内核模块加载(防rootkit) -w /sbin/insmod -p x -k module_load -w /sbin/rmmod -p x -k module_load -w /sbin/modprobe -p x -k module_load
规则格式说明:-w后面是监控路径,-p后面是权限类型(r读、w写、x执行、a属性变更),-k后面是自定义关键词标签,方便后续搜索。写完规则后必须重新加载:
sudo augenrules --load
或者直接重启服务:
sudo service auditd restart
四、验证规则是否生效
用ausearch命令查询当前加载的规则:
sudo ausearch -k etc_changes
如果你手动修改了/etc下的某个文件,马上就能看到审计记录。也可以用auditctl -l查看所有活动规则。注意,规则一旦生效就无法动态删除(除非重启auditd服务),所以生产环境建议先在测试机验证。
五、审计日志的查看与分析方法
auditd的日志默认存放在/var/log/audit/audit.log,文件通常很大,直接cat看不现实。常用分析命令:
# 按时间范围查询 sudo ausearch -ts today sudo ausearch -ts recent # 按关键词标签查询 sudo ausearch -k web_changes # 查询某个用户的所有操作 sudo ausearch -ui 1000 # 查询某个文件被谁访问过 sudo ausearch -f /etc/passwd # 生成可阅读的报告 sudo aureport --auth sudo aureport --file sudo aureport --syscall
aureport是审计报告生成工具,--auth看登录事件,--file看文件访问统计,--syscall看系统调用汇总。对于取证场景,建议把audit.log定期备份到只读存储或远程日志服务器,防止攻击者删除本地日志。
六、取证实战:如何从audit日志中还原攻击链
假设你发现系统被入侵,第一步不是急着修复,而是固定证据。具体流程:
1、立即用dd命令对磁盘做镜像备份,确保原始数据不被破坏。
2、从audit.log中提取关键时间窗口的记录,比如用ausearch -ts 03/15/2024 10:00:00 -ts 03/15/2024 12:00:00定位攻击发生时段。
3、按时间线梳理:先看登录事件(ausearch -k login_events),确认攻击者从哪个IP、哪个用户登录;再看文件操作(ausearch -k etc_changes),看他改了什么配置;最后看命令执行(ausearch -k sudo_exec),看他提权做了什么。
4、把所有相关记录导出为文本:
sudo ausearch -ts 03/15/2024 10:00:00 -ts 03/15/2024 12:00:00 > /tmp/forensic_report.txt
这份报告就是法律层面的电子证据。注意,audit日志本身也可能被篡改,所以前面说的镜像备份和远程日志转发至关重要。
七、auditd的性能优化与注意事项
审计规则写太多会影响系统性能,尤其是监控/home这种大目录。几个优化建议:
第一,避免用-w /监控根目录,范围太大会产生海量日志。尽量精确到子目录。
第二,合理设置auditd的缓冲区大小,编辑/etc/audit/auditd.conf:
num_logs = 5 max_log_file = 8 max_log_file_action = ROTATE
第三,如果磁盘空间紧张,配置日志轮转,在/etc/audit/auditd.conf中设置:
disk_full_action = SUSPEND disk_error_action = SUSPEND
磁盘满了就暂停审计而不是丢失数据。第四,定期用aureport --summary检查审计系统本身是否正常运行,如果发现auditd进程被kill或者规则被清空,那本身就是严重安全事件。
八、auditd与其他安全工具的配合
auditd不是孤立工具,它应该和其他安全层配合使用。比如配合fail2ban,可以把auditd检测到的暴力破解登录事件实时触发封IP;配合OSSEC或Wazuh等HIDS系统,把audit日志作为数据源做关联分析;配合rsyslog把审计日志转发到集中式日志平台做长期存储和可视化。这种组合拳才是完整的Ubuntu安全监控体系。
总结一下,auditd在Ubuntu上的部署并不复杂,核心就是装包、写规则、启服务、看日志四步。但真正用好它需要根据业务场景精细调整规则,既不能漏监控,也不能让系统被日志压垮。把auditd当成系统的"黑匣子",平时不起眼,出事时它就是你还原真相的唯一依靠。
