Android P SElinux权限调试
在Android P上要开发一个开机过程中运行bin程序,在Android O上权限问题还算比较好解决,而在 Android P上面由于谷歌收紧了 Android SElinux控制,增加了许多neverallow规则,导致调试权限十分不便
开发的bin程序由于要开机运行,因此需要通过init.rc去启动这个bin程序severe。而这个bin程序要去控制“data”分区文件和“sys”文件节点状态。
因此该功能涉及到selinux权限有两部分,一部分是sys下的权限,一部分是data下的权限
在userdebug下SElinux 权限调试模式
由于该功能在开机阶段,不能直接用setenforce 0
方式去设置SElinux权限为permissive进行debug,可以采用在自己的te文件添加对自己该部分的permissive权限用于调试,以此bin程序举例
type egbin, domain;
type egbin_exec, exec_type, file_type;
permissive egbin;
#注意:该功能只能用在userdebug、eng版本,user版本会导致编译不通过
init_daemo_domain(egbin)
sys下的权限
由于Android P收紧的对 sysfs 的权限,导致直接配置对sysfs的SElinux权限,会触发编译时的neverallow规则,如
……
allow egbin sysfs:file {
read getattr open ioctl }
allow egbin sysfs:dir {
search }
……
上述规则在Android P之前是可以编译通过的,在Android P上是不可以的。推测原因可能是Android P收紧了对“sys”底下的文件权限,如果直接给应用sysfs权限,会导致应用权限太大,可以在sys下干许多事情,很不安全。因此需要细化sys下的权限,对于上面:
- 问题需要在file.te和file_contexts下添加对于sys具体目录下的组别
#Path:/device/qcom/sepolicy/vendo