auditd通过监控mount和umount2系统调用、提取dev=字段关联lsblk识别USB设备、启用ENRICHED日志格式记录uid/exe/cmdline等上下文,实现对USB插拔及挂载行为的全链条强制审计。

要让 auditd 对物理 USB 设备的插拔及挂载行为执行强制记录,关键不是监控 udev 事件(auditd 不直接捕获硬件热插拔),而是精准捕获内核级挂载动作、设备识别上下文和用户操作链。USB 设备一旦接入,必须通过 mount 系统调用才能被访问,而其底层设备路径(如 /dev/sdb1)和传输类型(usb)可事后追溯。配置需覆盖“设备出现 → 被挂载 → 由谁执行”全链条。
启用 auditd 并确认内核审计就绪
服务未运行,规则无效:
- 运行
sudo systemctl status auditd,确保状态为 active (running) - 若未启用,执行
sudo systemctl enable --now auditd - 验证内核审计已激活:
sudo auditctl -s | grep enabled输出应为enabled 1
添加系统调用级挂载规则(核心必选)
USB 挂载本质是 mount(2) 和 umount2(2) 系统调用,必须监听:
- 创建规则文件:
sudo nano /etc/audit/rules.d/usb-mount.rules - 写入以下两行(适配 x86_64):
-a always,exit -F arch=b64 -S mount -F success=1 -k usb_mount
-a always,exit -F arch=b64 -S umount2 -F success=1 -k usb_umount -
-F success=1只录成功操作,避免失败尝试干扰 -
-k usb_mount/-k usb_umount是后续检索唯一可靠标识
加载规则:sudo augenrules --load
验证生效:sudo auditctl -l | grep usb_mount
增强设备识别能力(不依赖路径通配)
auditd 的 -F path= 在 mount 调用中无法匹配 /dev/sd* 通配符(内核不支持)。正确做法是:
- 日志中天然包含
dev=字段(如dev="08:01"),对应主次设备号 - 插拔后立即执行
lsblk -o NAME,TRAN,MODEL,比对TRAN=usb的设备 - 查日志时用
ausearch -m mount -i -k usb_mount | grep "dev=\""提取设备号,再反查是否为 USB 类型
捕获完整执行上下文(定位责任人)
单条 mount 记录默认字段有限,需确保日志含用户、命令行、进程路径:
- 编辑
/etc/audit/auditd.conf,确认存在或设置:
log_format = ENRICHED - 该格式自动记录
uid=、auid=、comm=(进程名)、exe=(绝对路径)、cmdline=(完整参数) - 示例可疑记录特征:
comm="bash"+cmdline="mount /dev/sdc1 /media/usb"+uid=1001comm="systemd"+exe="/usr/lib/systemd/systemd"→ 可能是自动挂载,需结合auid判断登录会话来源
基本上就这些

















