应聚焦“非常规读取”行为本身,即监控非交互式、非shell内置命令触发的读操作,并结合用户上下文和执行路径过滤;部署两条规则:-a always,exit -F arch=b64 -S execve -F uid!=0 -F auid>=1000 -F auid!=4294967295 -k home_hidden_scan,捕获可疑命令调用;-a always,exit -F arch=b64 -S openat -F path=/home -F perm=r -k home_hidden_read,监控/home下所有只读打开操作;再通过ausearch精准过滤隐藏文件读取事件。

直接用 auditctl -w 监控 /home 下所有隐藏文件不现实,因为 auditd 不支持通配符或递归路径。真正可行的做法是:聚焦“非常规读取”行为本身,而非穷举文件——即监控非交互式、非 shell 内置命令触发的读操作,并结合用户上下文和执行路径过滤。
明确“非常规读取”的定义与监控切入点
隐藏配置文件(如 ~/.bashrc、~/.ssh/config、~/.gitconfig)被读取通常分两类:
-
常规读取:shell 启动时自动 source、编辑器打开、
cat/less手动查看——这些行为本身合法,但若发生在异常时间、非登录会话或由可疑进程发起,就值得审计; -
非常规读取:脚本批量扫描用户家目录、远程工具(如 Ansible、Salt)拉取配置、恶意程序提取 SSH 密钥、定时任务中非预期调用——这类行为往往通过
execve调用外部命令(如grep、strings、python)实现,且不伴随交互式终端。
因此,不盯文件路径,而盯“谁在什么上下文中调用了什么命令去读隐藏文件”,才是精准抓非常规行为的关键。
部署两条互补规则:一条捕获可疑命令调用,一条标记高风险读操作
在 /etc/audit/rules.d/99-home-hidden.rules 中写入:
-
-a always,exit -F arch=b64 -S execve -F uid!=0 -F auid>=1000 -F auid!=4294967295 -k home_hidden_scan
→ 捕获所有非 root、有真实登录会话(auid != 4294967295表示非无会话进程)、UID ≥ 1000 的用户的命令执行,重点识别grep .bashrc /home/*或find /home -name ".*" -exec cat {} \;类行为; -
-a always,exit -F arch=b64 -S openat -F path=/home -F perm=r -k home_hidden_read
→ 监控所有对/home目录下任意文件的只读打开操作(openat是现代 glibc 默认系统调用),配合后续日志过滤识别隐藏文件路径;
注意:-F path=/home 是路径前缀匹配,auditd 支持该语法;perm=r 确保只抓读操作,避免写/执行干扰。
用 ausearch 精准提取“非常规”读取事件
加完规则并运行 augenrules --load 后,用以下命令组合过滤出高可疑项:
-
ausearch -k home_hidden_read -m openat -i --start today | awk '/\.\/\./ {print $0}' | grep -E "(comm=\"(grep|awk|sed|python|perl|curl|wget)\")"
→ 先筛选出打开路径含./.(即隐藏文件名),再限定调用命令为典型数据提取或网络工具; -
ausearch -k home_hidden_scan -m execve -i --start 24h ago | aureport -f -i | grep "\.ssh/|\.[^/]*config"
→ 查找过去一天内,由非 shell 进程执行的、目标路径含.ssh/或其他常见隐藏配置名的命令; - 补充判断依据:检查
terminal=字段是否为空(表示无 TTY,大概率是脚本或远程调用),以及exe=是否指向/usr/bin/bash以外的解释器(如/usr/bin/python3)。
权限与持久化必须到位
确保以下三点,否则规则形同虚设:
- auditd 服务已启用并运行:
systemctl is-active auditd返回active,且auditctl -s | grep enabled显示enabled 1; - 规则文件名以
.rules结尾,且位于/etc/audit/rules.d/;修改后必须执行augenrules --load(不是systemctl restart auditd); - 监控对象是真实路径:如果用户家目录挂载在
/data/home,规则中的/home就无效,需按实际挂载点调整。
不复杂但容易忽略。


















