一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

配置 Auditd 审计用户环境初始化文件读取

时间:2026-07-13 08:40:52 编辑:袖梨 来源:一聚教程网

应使用指定架构的 execve 审计规则监控 shell 启动行为,而非直接监控配置文件读取;需设置 -a always,exit -F arch=b64/b32 -S execve -F exe=/bin/bash 等规则,并添加 -F uid!=0 和 -F auid>=1000 过滤普通用户会话,再通过 ausearch 查看带 auid、exe 等字段的事件。

要审计用户环境初始化文件(如 /etc/profile/etc/bash.bashrc~/.bashrc~/.profile 等)的读取行为,核心在于捕获 execve 系统调用中 shell 解析并加载这些文件的过程——但需注意:auditd 不直接审计“文件被读”,而是审计“谁在什么上下文中执行了触发该读取的系统调用”。单纯用 -w 监控 ~/.bashrc-p r 会因高频读取导致日志爆炸且难以关联真实用户行为,不可取。

必须指定架构的 execve 规则

用户登录或新 shell 启动时,bash/zsh 等会调用 execve 加载自身,并在初始化阶段主动读取配置文件。要捕获这一链路,规则必须:

  • 使用 -a always,exit 确保每次调用都记录
  • 显式指定 -F arch=b64(x86_64 系统)或 -F arch=b32(兼容 32 位),否则内核完全忽略该规则
  • 限定目标程序,避免全量捕获:例如只监控 bash 和 sh 启动

示例规则(写入 /etc/audit/rules.d/shell-init.rules):

-a always,exit -F arch=b64 -S execve -F exe=/bin/bash -k shell_bash_init<br>-a always,exit -F arch=b64 -S execve -F exe=/bin/sh -k shell_sh_init<br>-a always,exit -F arch=b32 -S execve -F exe=/bin/bash -k shell_bash_init32

补充关键过滤条件提升准确性

仅靠 execve 只能知道“谁执行了 bash”,无法确认是否真去读了 /etc/profile。需叠加上下文字段缩小范围:

  • -F uid!=0:排除 root 手动执行,聚焦普通用户会话
  • -F auid>=1000:匹配交互式登录用户的审计 UID(auid 不变,uid 可能切换)
  • -F path=/etc/profile-F path=/etc/bash.bashrc:可选,与 execve 规则组合后,能定位到具体被加载的初始化文件(需确保路径真实存在)

注意:path= 过滤对 execve 规则有效,但仅当该文件作为参数被传递或被子进程显式打开时才命中;shell 内部自动加载行为通常不体现为独立 path 字段,因此主规则仍以 exe + arch 为核心。

验证与查询方法

规则生效后,触发一次新 shell(如新开终端或 su -l $USER),再执行:

  • sudo auditctl -l | grep shell_:确认规则已加载
  • sudo ausearch -k shell_bash_init -i --start recent:查看带可读解释的最近匹配事件
  • 重点看字段:auid(登录用户)、uid(当前有效用户)、comm(命令名)、exe(执行文件路径)、cwd(工作目录)、proctitle(进程标题,常含启动参数)

若需进一步追踪某次 shell 启动后读取了哪些 rc 文件,可结合 autrace 对该进程做临时跟踪,但不宜长期开启。

避免常见陷阱

以下操作会导致规则失效或日志无意义:

  • 未运行 sudo augenrules --load:仅存文件不生效
  • 规则文件名不是 .rules 结尾(如叫 init-audit.conf):augenrules 完全跳过
  • 在容器或 minimal 镜像中未安装 auditd 或未加载 audit 内核模块
  • /home/*/.bashrc 使用通配符路径:auditd 不支持 glob,需按实际路径逐条写,或改用 inotify+auditd 联动方案

热门栏目