1.直接从日志中获取信息添加缺失的SELinux权限
[ 3.342984] audit: type=1400 audit(243.435:7): avc: denied { open } for pid=313 comm="sn_writer" path="/dev/__properties__/u:object_r:vendor_product_prop:s0" dev="tmpfs" ino=14874 scontext=u:r:startup:s0 tcontext=u:object_r:vendor_product_prop:s0 tclass=file permissive=0
- 上方denied { open }的{ open }表示执行的操作。根据它和末尾的 tclass=file permissive=0,可以大致了解是对什么对象执行什么操作被拒绝了。
- scontext=u:r:startup:s0 表示发起相应操作的环境,此示例表示的是startup service。
- tcontext=u:object_r:vendor_product_prop:s0 表示操作目标的环境,在此示例中是归 startup 所有的某个 file。
- comm="sn_writer" 可帮助了解拒绝事件发生时正在运行的程序。
可以总结出selinux权限语法为:
allow [scontext] [tcontext]:[tclass] [denied];
allow startup vendor_product_prop:file open;
2.audit2allow使用总结
- 把手机里面的policy文件拉到工程根目录
- 配置环境变量
- 复现场景
- 导出dmesg/logcat喂给audit2allow生成selinux rule
3.可以直接使用可视化工具处理
GitHub - fq0222/android_selinux_tools: 帮助开发者快速根据日志,生成Allow规则语句。