Android中SeLinux权限 .te文件编写

  在android中添加一个LocakSocket通信,权限部分折腾了好几天,终于搞定了.

  首先在root权限下使用setenforce 0命令放开selinux权限,看看需要的操作是否能成功.如果可以,证明是Selinux的设置问题.仅使用该命令,手机重启又会恢复为enforce为1的状态.为了长久更改此权限,需更改如下.

  /device/qcom/sepolicy 目录下找到对应的版本,在里面添加自己的服务对应的te文件,如service.te.编辑内容如下:

        type service, domain;
        type service_exec, exec_type, file_type; 
        init_daemon_domain(service)

  接下来在下面加上各种权限设置,具体的权限添加可根据经验添加.对于我这种小白,只能采用一步步尝试了.编译系统到手机中,运行你的服务,查看权限组阻止日志:

                              adb shell

                              su

                              cat /dev/kmsg

  寻找这种形式的日志:36,7462,1035433895,-;type=1400 audit(836284.029:112): avc: denied { execute } for pid=11710 comm="mpctrl" name="sh" dev="mmcblk0p21" ino=502 scontext=u:r:mpctrl:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=0

  那么在上面的service.te文件末尾添加 allow mpctrl shell_exec:file execute;(记得加分号,否则编译通不过)

  mpctrl对应为scontext中的第三项,shell_exec对应为tcontext中的第三项,类型file对应为tclass,需要的权限为denied { execute }中的execute.

  可能不止需要一个权限,那么就再次编译,重复上面步骤寻找,添加.编译的过程中可能由于你加入的权限和某些权限配置产生冲突,比如/external/sepolicy/app.te中的一些neverallow语句,那么就需要看情况注释一些不允许的规则了,或者通过在neverallow中"-***"除去你所需要打开权限针对的内容.

猜你喜欢

转载自blog.csdn.net/x2017x/article/details/77847988
te