简单介绍
auditd 一个linux重要组件, 主要用于监控系统调用和文件访问。通过配置审计规则,可以用来记录文件访问、登录尝试、权限更改等操作,能够帮管理员追踪系统的安全时间和异常行为。
动手实践
准备工作
大多数linux版本,auditd都默认没有安装,博主的linux环境是debain系统,使用以下命令进行安装
sudo apt-get update
sudo apt-get install auditd
auditd服务组件安装完,默认是没有启动的,使用以下命令进行启动并观察服务运行状态
systemctl start auditd
systemctl status auditd
实际应用
一、监控指定文件是否被修改
例如对/etc/passwd文件访问添加监控规则。
1、直接修改监控配置文件/etc/audit/rules.d/audit.rules,在文件尾部添加以下规则:
-w /etc/passwd -p wa -k passwd_changes
-w 表示监控文件路径,-p表示要监控的权限类型,-k自定义关键字,用于标识此条监控规则
2、重启auditd服务,使用auditdctl -l 命令观察监控规则是否被加载
3、新建一个test用户,查看auditd监控到的事件行为日志
tail -f /var/log/audit/audit.log
从日志来看,用户root在主目录下执行了useradd命令新创建了个test用户,监控日志展示了两个阶段,第一阶段,通过openat系统调用打开文件/etc/passwd进行修改,第二阶段通过rename系统调用修改/etc/passwd文件内容并保存提交。
具体审计事件字段解释可参考:
audit字段解释 - 简书
4、扩展
可以用grep 捕获监控规则关键字passwd_changes查看相关的日志,但与auditd审计日志结合使用的更多是ausearch、aureport两个命令。
1)auserach用于查询auditd生成的审计日志
用法:
ausearch 【选项】 【过滤条件】
-ts <时间> 指定起始时间
-te <时间> 指定结束时间
-k <关键字> 按审计规则关键字过滤
-f <文件路径> 监控特定文件的操作记录
-m <事件类型> 按事件类型过滤(比如USER_LOGIN、CONFIG_CHANGE)
-ua <uid> 按用户ID过滤
--start <today/yesterday> 按相对时间筛选
-i 将数字ID解析为可读信息(如用户名、IP)
使用ausearch -k passwd_changes -i 查看这次监控事件
2)aureport用于生成审计日志的汇总报告
用法:
aureport
-t 显示日志时间范围报告(如起始时间和结束时间)
--failed/success 仅显示失败或成功的事件
-f 生成文件访问报告(需结合审计规则)
--summary 生成事件类型的简要统计
使用ausearch -k passwd_changes | aureport -f -i查看这次监控事件报告
二、监控用户登录是否存在异常
/var/log/audit/audit.log审计日志会记录用户登录事件,使用ausearch查询是否存在异常,比如陌生ip登录,多次登录失败。
ausearch -m USER_LOGIN -i
如发现陌生ip登录,可以将其加入黑名单,或者配置防火墙过滤
黑名单:
echo 'sshd:192.168.1.0/24' >>/etc/hosts.deny
防火墙
iptables -A INPUT -s 192.168.1.0/24 -j DROP
iptables-save
三、监控用户权限变更
1、监控关键文件修改行为
提权操作通常涉及用户信息、密码文件、用户组的修改
auditctl -w /etc/passwd -p wa -k user_priv_escaltion
auditctl -w /etc/shadow -p wa -k user_priv_escaltion
auditctl -w /etc/group -p wa -k user_priv_escaltion
2、监控提权命令的执行
通过监控su、sudo等提权命令的系统调用(如execve)捕获提权操作
auditctl -a always,exit -F arch=b64 -S execve -F exe=/usr/bin/sudo -k user_priv_escaltion
auditctl -a always,exit -F arch=b64 -S execve -F exe=/usr/bin/su -k user_priv_escaltion
参数说明:
-a always,exit 始终记录该操作
-S 监控execve系统调用
-F exe=<路径> 监控特定程序路径
3、监控用户权限变更的系统调用
提权操作可能通过修改用户UID/GID实现(如利用setuid或者setgid)
auditctl -a always -F arch=b64 -S setuid,setgid -F auid>=1000 -k user_priv_escaltion
-F auid>=1000 仅监控非系统用户(uid>=1000)的操作
持久化
sh -c 'auditctl -l > /etc/audit/rules.d/audit.rules'
使用访客用户登录,尝试一个简单的提权指令都能被监控到
问题拓展
一、/etc/audit/audit.rules 与/etc/audit/rules.d/audit.rules 这两个配置文件有啥区分?
/etc/audit/audit.rules旧版本默认主规则文件,包含所有审计规则,直接有audit服务加载,优先级低于rules.d
/etc/audit/rules.d/audit.rules新版模块化规则目录中的文件,属于rules.d目录下的一个规则文件,用于拆分管理不同场景的规则。
当重启auditd服务时,从rules.d路径下读取所有的.rules文件,将监控规则汇总自动生成/etc/audit/audit.rules,而旧监控规则保留到audit.rules.prev,即备份。
也就是说当audit采用模块化规则目录管理监控规则,通过修改监控规则文件的方式添加新的监控规则,要么直接对/etc/audit/rules.d/audit.rules进行追加,或者对直接在/etc/audit/rules.d/下生成一个新的监控规则文件.rules,针对/etc/audit/audit.rules 文件修改是不起作用的。
二、使用命令行auditctl -w /etc/passwd -p wa -k passwd_chages添加监控规则,提示"old style watch rules are slower"?
该规则仍是基于传统的文件路径监控机制(-w 参数),需实时解析路径到内核inode,存在路径遍历开销,其实现方式对内核资源消耗较大,尤其是在监控递归目录或频繁变动的文件时性能较低。
而新式规则(-a)直接绑定文件或目录的inode,避免路径解析延迟,效率更高。
可优化成 auditctl -a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -k passwd_changes