EN
Home > FAQ | awinic > FAQ0500639: 如何更改android权限使得app能有权限操作文件?

FAQ0500639: 如何更改android权限使得app能有权限操作文件?

Motor Driver 2022-09-01 Views: 115 Likes: 0

某客户制作的app需要对灯的节点进行echo操作,但操作失败并会出现以下log:

type=1400 audit(0.0:280): avc: denied { write } for name="fw" dev="sysfs" ino=37586 scontext=u:r:untrusted_app:s0:c93,c256,c512,c768 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

分析:

主体类型(scontext):untrusted_app

客体类型(tcontext): sysfs

客体文件名(name):fw

客体类别(tclass):file

需要的权限:write

根据以上可得知,untrusted_app对节点fw的写操作被SELinux拦截。

而应客户需求,会将app做成system app,故以下解决方案会以system app为对象,以高通平台为例:

1.在/qcom/sepolicy/vendor/common/file_contexts内,定义实际节点路径的安全标签: /devices/platform/soc/78b6000.i2c/i2c-2/2-006a/leds/u:object_r:sysfs_leds:s0

2.在/qcom/sepolicy/common/system_app.te,申请权限:

allow system_appsysfs_leds:file rw_file_perms;

3. 重新编译源码。

4. 将app做成system app。

信息补充:

SELinux将app划分为主要的三种类型:

1)untrusted_app:第三方app,没有android平台签名,没有system权限;

2)platform_app:有android平台签名,没有system权限;

3)system_app:有android平台签名和system权限。

安全标签的定义规则:

标签的基本格式为:user:role:type:security_level

user:代表用户,目前为止可选值只有“u”一种。

role:代表角色,对于主体来说是r,对于客体来说是object_r。

type:代表类型。

security_level:代表安全级别,s0为最低级是默认的级别,s15是最高的级别。


Back to FAQ List