udev 规则的执行痕迹
udev 依据规则文件在设备接入、移除或系统启动时执行动作,规则中的 RUN+= 可以调用外部程序,PROGRAM= 可以对设备属性做判断后决定后续行为。这让 udev 成为少见但有效的持久化位置:写入一条规则后,只要等待某个设备被接入,脚本就会被执行,平时在进程与启动项里几乎看不到。检查重点是规则文件的新增与改动时间,以及所有包含 RUN+= 的条目;判断异常前先用包管理器确认哪些规则属于发行版自带。
基本信息
| 目录 | /etc/udev/rules.d/、/run/udev/rules.d/、/usr/lib/udev/rules.d/ |
|---|---|
| 关键字段 | RUN+=、PROGRAM=、ACTION==、KERNEL== |
| 生效方式 | udevadm control --reload 或重启主机 |
| 注意 | /run 下为运行时目录,重启后消失 |
典型使用场景
- 排查插拔 U 盘或外设时被触发的可疑程序
- 比对备份目录,找出新增或改动的规则文件
- 确认某条规则是否属于发行版自带而非手工添加
- 检查规则指向的执行路径是否落在临时目录
- 评估清理顺序:先摘除规则再删除被调用的脚本
核查规则
核查规则
ls -lt --time-style=long-iso /etc/udev/rules.d/ | head # 按时间看规则文件
grep -Rn 'RUN+=' /etc/udev/rules.d/ /run/udev/rules.d/ 2>/dev/null | head
find /etc/udev -newermt '-30 days' -type f 2>/dev/null | head # 近期改动的文件
rpm -qf /etc/udev/rules.d/60-example.rules 2>/dev/null || dpkg -S /etc/udev/rules.d/60-example.rules 2>/dev/null # 归属确认
cat /etc/udev/rules.d/99-custom.rules 2>/dev/null # 查看可疑规则全文规则字段读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| ACTION== | 匹配设备事件类型 | add 表示接入时触发 |
| KERNEL== | 匹配设备名或子系统 | 可针对特定设备精准触发 |
| RUN+= | 执行外部程序或脚本 | 指向临时目录时高度可疑 |
| PROGRAM= | 执行判断程序并看返回码 | 本身也是代码执行点 |
发行版自带规则数量众多,直接按内容判断容易误报;先用包管理器反查归属,再对无归属且时间异常的规则做重点分析。
规则触发依赖硬件事件,不接入对应设备就不会执行,因此规则文件存在不等于行为已发生,还需要从被调用脚本的访问时间或审计记录寻找佐证。
/run/udev/rules.d 属于运行时目录,重启即失,现场采集要第一时间连同该目录一起留存,否则这类痕迹无法恢复。