由于现做的是MTK平台,源码路径基于MTK, 不过高通大同小异

说明

Android 5.0以后完全引入了 SEAndroid/SELinux 安全机制,这样即使拥有 root 权限或 chmod 777 ,仍然无法再JNI以上访问内核节点。

其实在 Android 4.4 就有限制的启用此安全机制了。后面内容都按照 5.0 以后介绍,4.4 会有些许差异。

SELinux Mode

SELinux 分为两种模式,Android 5.0 后所有进程都使用 enforcing mode。

?

1

2

enforcing mode: 限制访问

permissive mode: 只审查权限,不限制

SELinux Policy文件路径

?

1

2

3

4

5

6

# Google 原生目录

external/sepolicy

# 厂家目录,高通将 mediatek 换为 qcom

alps\device\mediatek\common\sepolicy

alps\device\mediatek\<platform>\sepolicy

编译时将以合并的方式将厂家policy追加到Google原生。

Log

没有权限时可以在内核找到如下 log :

?

1

2

3

4

5

6

7

8

9

10

11

12

# avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0

avc: denied {getattr read} for pid=7201 comm="xxx.xxx" scontext=u:r:system_app:s0 tcontext=u:r:shell_data_file:s0 tclass=dir permissive=0

```

## 权限修改

主要有三种方式,前两种只能用来测试,第三种是推荐的正式处理方式。

### adb在线修改seLinux

```bash

# Enforcing - 表示已打开 ,Permissive - 表示已关闭

getenforce;  //获取当前seLinux状态

setenforce 1; //打开seLinux

setenforce 0; //关闭seLinux

kernel中关闭

?

1

2

# alps\kernel-3.18\arch\arm64\configs\xxx_defconfig

CONFIG_SECURITY_SELINUX=y // 屏蔽此配置项

SELinux Sepolicy中添加权限

修改相应源类型.te文件(基本以源进程名命名),添加如下一行语句:

?

1

2

3

4

5

6

7

8

9

# 格式

allow 源类型 目标类型:访问类型 {操作权限}; // 注意分号

# 实例,具体写法参考源码

allow system_app shell_data_file:dir{getattr read write};

allow mediaserver tfa9897_device:chr_file { open read write };

allow system_server tfa9897_device:chr_file rw_file_perms;

chr_file - 字符设备 file - 普通文件 dir - 目录

通常很少修改Google default 的policy, 推荐更新mediatek 下面的相关的policy.

新建节点

如果是自己新建的节点,需要在 sepolicy 路径下的 file_contexts 文件中做如下添加:

?

1

2

# 参考已有的格式

/dev/goodix_fp     u:object_r:goodixfp_device:s0

Android 5.0 修改的文件为device.te 和 file_contexts.be,而且device/mediatek/common/BoardConfig.mk 中的 BROAD_SEPOLICY_UNION 增加对应的xxxx.te。

编译

?

1

2

3

4

5

6

# 模块编译

mmm external/sepolicy

make -j24 ramdisk-nodeps & make -j24 bootimage-nodeps

# 整编

make -j24

ps添加权限后的neverallowed冲突

编译报错:

libsepol.check_assertion_helper: neverallow on line xxx ofexternal/sepolicy/domain.te ……

原因:

新添加的sepolicy项目违反了domain.te 中规定的的总策略原则。所以该条权限策略不能添加,如果强行添加的话有CTS测试失败的风险。

解决方法:

1.从运行log中找到要访问的目标名称,一般是name字段后的名称
avc: denied { read write } for pid=303 comm="mediaserver" name="tfa9890"dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0tcontext=u:object_r:device:s0tclass=chr_file permissive=0

2.找到相应的*_contexts文件。

一般有file_contexts, genfs_contexts,  property_contexts,  service_contexts 等文件

在contexts文件中指定要访问的目标为一个“源类型 ”有权限访问的“目标类型”

如:在file_contexts中添加: /dev/tfa9890     u:object_r:audio_device:s0

举例

添加权限:

在mediaserver.te中添加allow mediaserver device:chr_file { read write open};

编译报错:
libsepol.check_assertion_helper: neverallow on line 258 ofexternal/sepolicy/domain.te (or line 5252 of policy.conf) violated byallow mediaserver device:chr_file { read write open};

违反了domain.te 258的:
neverallow {domain –unconfineddomain –ueventd } device:chr_file { open read write}

运行Log:
avc: denied { read write } for pid=303 comm="mediaserver"name="tfa9890" dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0 tcontext=u:object_r:device:s0tclass=chr_file permissive=0

修改步骤:

1.目标名称是: tfa9890, 其在系统中的路径是: /dev/tfa9890,  是audio相关的设备文件
2.源类型是mediaserver, 在mediaserver.te 文件中发现其具有 audio_device 目标类型的权限
3.所以在file_contexts 中添加 “/dev/tfa9890        u:object_r:audio_device:s0” 可以解决问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家

详解Android Selinux 权限及问题相关推荐

  1. 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法

    必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinD ...

  2. linux沙盒机制6,详解Android应用沙盒机制

    前言 Android使用沙盒来保护用户不受恶意应用的侵害,同时也将应用隔离开来,防止他们互相访问其数据,本文主要对Android应用沙盒中的几种技术做简要的总结. 一.Android应用DAC沙盒 稍 ...

  3. 源码详解Android 9.0(P) 系统启动流程之SystemServer

    源码详解Android 9.0(P) 系统启动流程目录: 源码详解Android 9.0(P)系统启动流程之init进程(第一阶段) 源码详解Android 9.0(P)系统启动流程之init进程(第 ...

  4. adb shell 命令详解,android, adb logcat

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  5. 现在详解Android App AllowBackup配置带来的风险

    现在位置:  首页 >  文章 >  移动安全 > 正文 详解Android App AllowBackup配置带来的风险 2015 /3/11 1:27 10,105 评论 3 条 ...

  6. 19. linux中权限详解,Linux权限位,读写执行权限真正含义,chmod详解

    linux中权限详解,Linux权限位,读写执行权限真正含义,chmod详解 文章目录 Linux权限位 读写执行 三种权限真正含义和作用 权限对文件的作用 权限对目录的作用 示例 chmod 使用数 ...

  7. 两分钟窃取身边女神微博帐号?详解Android App AllowBackup配置带来的风险

    两分钟窃取身边女神微博帐号?详解Android App AllowBackup配置带来的风险 笔者在使用自己编写的Drozer模块对国内流行的安卓手机应用进行自动化扫描后发现有大量涉及用户财产和隐私的 ...

  8. 深度详解 Android 之 Context

    文章目录 一. 简介 1.1 Context 概述 1.2 Context 体系结构 1.3 Context 作用域 1.4 总结 二. Context 详解 2.1 Application Cont ...

  9. android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET

    收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread  Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...

最新文章

  1. Xpath语法-爬虫(一)
  2. 在python程序中的进程操作
  3. Spring中你不知道的注入方式
  4. 连接池,数据库连接池
  5. windows 弹shell_Windows系统常用免费软件“红黑榜”
  6. Android对Bitmap的内存优化
  7. spring-boot-actuator 常用配置
  8. 无法启动 nexus 服务,错误1067:进程意外终止。java环境变量设置技巧。
  9. 大话机器学习之数据预处理与数据筛选
  10. Kendo UI 模板概述
  11. CRMEB/V4.4标准版打通版商城源码小程序公众号H5+App商城源码
  12. 5.linux设备驱动模型
  13. Big5和Gb编码转换
  14. 胡乱学Java_遇见类与对象
  15. Windows 8 六大关机模式 详解
  16. 关于加速器加速后进入游戏显示WiFi功能丢失的解决方法(maybe)
  17. 学习机器学习一 基本基础知识
  18. sci论文图排版技巧分享
  19. 关于自定义TextView排版分散对齐的思路
  20. 教你手动编辑图像,提高ABBYY FineReader PDF 15识别准确性

热门文章

  1. android裁剪图片功能,实战:七步教你Android图片拍摄及剪裁
  2. java原始人生存繁殖的游戏,一款原始人生存繁殖的游戏
  3. [联想官方工具]关闭Win10自动更新工具 最新版 2.6.21.816
  4. echarts 折线图 设置y轴最小刻度_用plotly和plt画图的基本设置(标题、坐标轴、图例、注释、图像)...
  5. 不熟悉的四级核心词汇(三)
  6. 简述关于蓝牙电子秤PCBA方案开发设计
  7. EZ-USB CY7C68013A固件Slave FIFO初始化
  8. 安东尼奥·维瓦尔第——巴洛克音乐的奇葩
  9. 4k显示器用html好还是dp,专家解密!七点告诉你4K显示器和4K电视最大区别!
  10. Spring的那些事情(二)