audit2allow 用于从 avc 拒绝日志生成 selinux 允许规则,需先捕获日志(如 dmesg | grep avc),再用 audit2allow 解析输出策略语句或生成模块,最后整合进源码编译生效。

直接用 audit2allow 生成 SELinux 允许规则,核心是“从拒绝日志中提取信息、转成可读策略语句、再写入对应策略文件”。它不自动生效,只是帮你省去手动分析 AVC 拒绝日志和编写 allow 规则的繁琐过程。
抓取有效的 AVC 拒绝日志
SELinux 的拒绝事件必须先被系统记录下来,audit2allow 才有东西可处理。常见来源包括:
-
dmesg | grep avc:获取内核环缓冲区里的实时拒绝信息(适合刚复现问题后立即执行) -
adb logcat -b all -d | grep avc(Android)或journalctl -t kernel | grep avc(systemd 系统):导出完整日志流 -
ausearch -m avc -ts recent:使用 audit 工具精确筛选最近的 AVC 事件(需 auditd 运行) - 保存到文件便于重复使用:
dmesg | grep avc > avc.log
用 audit2allow 解析并生成规则
拿到日志后,用 audit2allow 提取策略建议。常用组合如下:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
audit2allow -i avc.log:直接读取日志文件,输出 raw allow 语句,例如allow system_app sysfs:file read; -
audit2allow -w -i avc.log:加-w输出带中文说明的可读提示,帮助你理解为什么需要这条规则 -
audit2allow -a -w:读取全部 audit 日志(如/var/log/audit/audit.log),适合排查历史问题(需 root 权限) -
audit2allow -M mypolicy -i avc.log:自动生成模块文件(mypolicy.te+mypolicy.pp),可后续用semodule -i mypolicy.pp加载(仅限临时调试,不推荐用于生产策略)
把规则写进正式策略文件
生成的 allow 语句不能直接运行,必须整合进 AOSP 或发行版的 SELinux 策略源码中:
- 在 Android AOSP 中,查找对应 domain 的
.te文件,比如system_app.te、vendor_ais_v4l2_proxy.te,路径通常在system/sepolicy或device/vendor/xxx/sepolicy - 用
grep -nR "allow system_app" .快速定位已有规则位置,避免重复 - 如果涉及新类型(如
app_fuse_file),需先在file.te或对应文件中定义:type app_fuse_file, file_type, data_file_type; - 添加规则时注意格式统一,例如:
allow system_app sysfs:file read;,末尾分号不能漏
验证与编译
改完策略后必须重新编译并刷机/安装,才能生效:
- Android:执行完整构建流程(
m或m sepolicy),刷入新镜像 - RHEL/CentOS:若用
-M生成了.pp模块,可用semodule -i mypolicy.pp临时加载(重启失效) - 验证是否生效:复现原操作,再查
dmesg | grep avc,确认无同类拒绝日志 - 检查策略加载状态:
semodule -l | grep mypolicy(模块名)或sesearch -A -s system_app -t sysfs -c file查具体规则是否存在










