selinux权限调试

在Android 中启动一个新的进程的时候,需要添加相关权限,否则进程无法启动。
以最近添加的BT/WIFI功能进程为例,解决步骤如下:

一、首先设置为permissive模式再启动进程

1.adb shell

setenforce 0 设置为宽容模式
logcat -c 清零logcat 里的log

2.使用QCOM启动相关进程后,再使用QRCT进行进程的通信测试

二、抓取log搜索相关关键字

1.logcat | grep ftmdaemon (也可以使用dmesg | grep ftmdaemon) 查看与启动的该进程所需要的相关权限
logcat 里可能会有如下log报出:

05-19 02:59:38.989 478 478 I hwservicemanage: type=1400 audit(0.0:54): avc: denied { transfer } for scontext=u:r:hwservicemanager:s0 tcontext=u:r:ftmdaemon:s0 tclass=binder permissive=1
05-19 03:00:19.189 4688 4688 I ftmdaemon: type=1400 audit(0.0:55): avc: denied { call } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:hal_bluetooth_default:s0 tclass=binder permissive=1
05-19 03:00:19.199 687 687 I bluetooth@1.0-s: type=1400 audit(0.0:56): avc: denied { call } for scontext=u:r:hal_bluetooth_default:s0 tcontext=u:r:ftmdaemon:s0 tclass=binder permissive=1
05-19 03:00:19.199 4688 4688 I ftmdaemon: type=1400 audit(0.0:57): avc: denied { search } for name="diagchar" dev="sysfs" ino=25033 scontext=u:r:ftmdaemon:s0 tcontext=u:object_r:sysfs_diag:s0 tclass=dir permissive=1
05-19 03:07:55.399 5249 5249 I ftmdaemon: type=1400 audit(0.0:58): avc: denied { dac_override } for capability=1 scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=capability permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:63): avc: denied { create } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:64): avc: denied { setopt } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:65): avc: denied { bind } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:66): avc: denied { getattr } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:67): avc: denied { write } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
05-19 03:08:09.339 5249 5249 I ftmdaemon: type=1400 audit(0.0:68): avc: denied { read } for scontext=u:r:ftmdaemon:s0 tcontext=u:r:ftmdaemon:s0 tclass=netlink_generic_socket permissive=1
2.分析log

以 05-19 02:59:38.989 478 478 I hwservicemanage: type=1400 audit(0.0:54): avc: denied { transfer } for scontext=u:r:hwservicemanager:s0 tcontext=u:r:ftmdaemon:s0 tclass=binder permissive=1为例
denied { transfer } 资源访问的操作 transfer
scontext=u:r:hwservicemanager:s0 操作主体 hwservicemanager
tcontext=u:r:ftmdaemon:s0 操作客体 ftmdaemon
tclass=binder permissive=1 操作客体所属类别binder

3.根据以上log可以看出,需要在以下两个路径下

\device\qcom\sepolicy\legacy\vendor\common
\device\qcom\sepolicy\generic\vendor\common
ftmdaemon.te文件中添加如下权限(也可以再此目录下任意选择一个te文件添加,因为最后会编译汇总到一个文件):

#============= ftmdaemon ==============
allow ftmdaemon hal_bluetooth_default:binder call;
allow ftmdaemon self:capability dac_override;
allow ftmdaemon self:netlink_generic_socket { write getattr setopt read bind create };
allow ftmdaemon sysfs_diag:dir search;
#============= hal_bluetooth_default ==============
allow hal_bluetooth_default ftmdaemon:binder call;
   注:也可以添加如下修改,直接授予关于ftmdaemon进程的所有权限

userdebug_or_eng(` permissive ftmdaemon; ')
这里编辑TE控制语句格式为 : rule_name source_type target_type : class perm_set
rule: 控制类型, 分为:allow 以及 audit
source_type:也叫subject,通常是domain,可以是一组subject,用{}包含起来。
target_type: 代表请求的资源的类型,可以是一组target,用{}包含起来。
class perm_set: 代表对资源访问的操作,perm_set可以是一组,用{}包含起来。
:一般出现的带有dac_override的那条log可以不管,dac_override 拒绝事件意味着违规进程正在尝试使用错误的 unix user/group/world 权限访问某个文件。正确的解决方案几乎从不授予 dac_override 权限,而是更改相应文件或进程的 unix 权限。有些域(例如init、vold 和 installd)确实需要能够替换 unix 文件权限才能访问其他进程的文件。 — — 来自 google官方文档 <授予 dac_override 权限 >

三、重新编译安卓即可,需要更新 super.img 和 userdata.img

把编译产生的新的镜像文件刷入模块,在不setenforce 0 情况下,再次启动进程,使用QRCT 进行进程通信验证权限是否添加完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值