Android 重新定义文件类型 解决neverallow的问题
添加权限后编译报错,neverallow xxx
跟本原因是 赋予的权限过⼤,缩⼩范围即可,解决⽅法:缩⼩范围(声明和指定具体需要访问的节点)后即可编译通过。
1.思路
敏感权限的特征:log中带有c512,c768字样 试着在untrusted_app.te 中添加了 allow untrusted_app audio_device:chr_file { open write read }; 还是报如下权限错误: [ 141.935275] type=1400 audit(1546939304.786:43): avc: denied { write } for pid=1836 comm="Thread-4" name="pcmC0D1c" dev="tmpfs" ino=11947 scontext=u:r:untrusted_app:s0:c512,c768 tcontext= u:object_r:audio_device:s0 tclass=chr_file permissive=1 先确认需要访问的节点是否为audio_device,这个节点属于敏感权限,可以的话请修改访问的⽬录和⽂件, 缩⼩audio_device的范围 ⽅法为1:确定访问的节点位置,通过源码或者log确定到底访问的哪⼀个具体的节点, 例如 /dev/pcmc00xx 2:在相应的te⽂件中新声明⼀个节点名称,如 file.te: type test_audio_device, dev_type; 3:在file_context中将具体节点绑定新的节点名称,如: file_context: /dev/pcmc00xx u:object_r:test_audio_device:s0 4. 增加或修改需要的权限:allow untrusted_app test_audio_device:chr_file { open write read }; 如果不过GMS认证,敏感权限(c512,c768)可以直接把对象关联mlstrustedobject,但不推荐这样修改, 会造成严重的安全问题: 例如:typeattribute audio_device mlstrustedobject;
2.实践
报错:
libsepol.report_failure: neverallow on line 129 of system/sepolicy/private/coredomain.te (or line 39405 of policy.conf) violated by allow system_app sysfs:file { read open }; libsepol.report_failure: neverallow on line 579 of system/sepolicy/public/domain.te (or line 12247 of policy.conf) violated by allow system_app serialno_prop:file { read getattr map open };
对于第一个报错:减小访问范围,将要访问的 sysfs 类型文件 具体化
android P 修改sysfs的 u:object_r:失效问题分析_weixin_32104133的博客-CSDN博客
1.在device\rockchip\common\sepolicy\vendor\file.te 中定义新的类型
system/sepolicy/public/property.te
2.指定新定义类型 所对应的文件节点 device\rockchip\common\sepolicy\vendor\file_contexts
/sys/devices/platform/fd800000.usb(/.)? u:object_r:sysfs_lj:s0
3.使用新定义的类型
allow system_app sysfs_lj:file { getattr open read };
对于第二个报错:新定义属性类型
添加系统属性 | Android 开源项目 | Android Open Source Project (google.cn)
1.定义类型device\rockchip\common\sepolicy\vendor\property.te
system_public_prop(serialno_prop_lj)
2.指定新属性类型对应的属性 device\rockchip\common\sepolicy\vendor\property_contexts
ro.serialno u:object_r:serialno_prop_lj:s0
ro.boot.serialno u:object_r:serialno_prop_lj:s0
3.使用新定义的属性类型
allow system_app serialno_prop_lj:file { getattr map open read };