Android 重新定义文件类型 解决neverallow的问题

发布时间 2023-08-29 17:18:14作者: xiaowang_lj

添加权限后编译报错,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 };