要监控核心系统日志文件的读取行为,关键是用auditd添加带auid过滤的-p r规则(如-w /var/log/messages -p r -F auid!=0 -k log_read),写入/etc/audit/rules.d/并执行augenrules --load持久化,再用ausearch -k log_read -i检索分析。

要监控对核心系统日志文件(如 /var/log/messages、/var/log/secure、/var/log/audit/audit.log 等)的读取行为,关键不是泛泛加 -p r,而是精准捕获谁在什么上下文中打开了这些文件,同时避免被高频率读取(如 logrotate、rsyslog 自身轮转)淹没日志。auditd 本身不区分“合法读”和“可疑读”,需靠规则设计 + 日志过滤实现有效审计。
明确你要监控的核心日志路径
常见目标包括:
-
/var/log/messages(通用系统日志) -
/var/log/secure(认证与安全事件) -
/var/log/audit/audit.log(auditd 自身日志,敏感度最高) -
/var/log/auth.log(Debian/Ubuntu 系统的等效文件) -
/var/log/kern.log(内核消息)
先确认实际存在路径:
ls -l /var/log/messages /var/log/secure /var/log/audit/audit.log 2>/dev/null
添加带用户上下文的只读监控规则
使用 -p r(仅读)+ -F auid!=0(排除 root 登录会话)或 -F uid>=1000(聚焦普通用户),并指定 -k log_read 统一标识:
# 监控非 root 用户读取 /var/log/messages sudo auditctl -w /var/log/messages -p r -F auid!=0 -k log_read # 监控任意用户读取 audit.log(因该文件本就不该被常规用户访问) sudo auditctl -w /var/log/audit/audit.log -p r -k log_read # 若用 UID 精确锁定某运维人员(如 auid=1005) sudo auditctl -w /var/log/secure -p r -F auid=1005 -k log_read
⚠️ 注意:
-
-w监控的是路径本身,不是文件内容变更;读操作触发openat/open/access系统调用即被捕获。 - 不加
-F auid或-F uid会导致tail -f /var/log/messages这类操作全量记录,日志迅速膨胀。 - 避免对
/var/log/整个目录加-w—— auditd 不递归,且目录级监控会捕获大量getdents(目录遍历),干扰主线。
让规则持久化并验证生效
临时规则重启即失效,必须写入规则文件:
echo "-w /var/log/messages -p r -F auid!=0 -k log_read" | sudo tee /etc/audit/rules.d/log-read.rules sudo augenrules --load
验证是否加载成功:
sudo auditctl -l | grep "log_read"
高效检索与识别可疑读取
规则启用后,用 ausearch 按 key 提取,并结合字段快速过滤:
# 查最近所有匹配 log_read 的读取事件(含可读格式)
sudo ausearch -k log_read -i --start recent
# 只看非 root 用户(auid ≠ 0)且确实访问了日志文件的记录
sudo ausearch -k log_read -i | awk '/auid != 0/ && /\/var\/log\// {print}'
# 查具体哪个命令在读(comm 字段)、由谁执行(auid)、执行路径(exe)
sudo ausearch -k log_read -m SYSCALL -i | grep -E "(comm=|auid=|exe=)"
典型可疑线索包括:
-
comm="cat"、comm="less"、comm="grep"但auid=1002(非管理员) -
exe="/usr/bin/python3"或自定义脚本路径,而非标准日志工具 -
cwd显示在用户家目录或临时目录下发起读取
不复杂但容易忽略。











