1.SEAndroid app分类

SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

1)untrusted_app  第三方app,没有Android平台签名,没有system权限
2)platform_app    有Android平台签名,没有system权限

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

从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app

2.seapp_contexts定义

system/sepolicy/seapp_contexts

[java] view plain copy  
  1. isSystemServer=true domain=system_server
  2. user=system seinfo=platform domain=system_app type=system_app_data_file
  3. user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
  4. user=nfc seinfo=platform domain=nfc type=nfc_data_file
  5. user=radio seinfo=platform domain=radio type=radio_data_file
  6. user=shared_relro domain=shared_relro
  7. user=shell seinfo=platform domain=shell type=shell_data_file
  8. user=_isolated domain=isolated_app levelFrom=user
  9. user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
  10. user=_app domain=untrusted_app type=app_data_file levelFrom=user

从上面可以看出,domain和type由user和seinfo两个参数决定。
比如:

user=system  seinfo=platform,domain才是system_app

user=_app,可以是untrusted_app或platform_app,如果seinfo=platform,则是platform_app。

3.user和seinfo判定方式

首先看user,user可以理解为UID,例如ps -Z结果如下:

[java] view plain copy  
  1. u:r:system_app:s0              system    2414  1172  com.android.keychain
  2. u:r:platform_app:s0            u0_a6     2439  1172  com.android.managedprovisioning
  3. u:r:untrusted_app:s0           u0_a8     2460  1172  com.android.onetimeinitializer
  4. u:r:system_app:s0              system    2480  1172  com.android.tv.settings
  5. u:r:untrusted_app:s0           u0_a27    2504  1172  com.android.email
  6. u:r:untrusted_app:s0           u0_a28    2523  1172  com.android.exchange
  7. u:r:untrusted_app:s0           u0_a7     2567  1172  com.android.musicfx

第一列是SContext,第二列是UID,只要UID是system的基本都是system_app,反过来一样。
其他的U0_XXX要么属于platform_app或untrusted_app

seinfo由system/sepolicy/mac_permissions.xml决定,内容如下:

[java] view plain copy  
  1. <!-- Platform dev key in AOSP -->
  2. <signer signature="@PLATFORM" >
  3. <seinfo value="platform" />
  4. </signer>
  5. <!-- All other keys -->
  6. <default>
  7. <seinfo value="default" />
  8. </default>

即如果签名是platform,seinfo就是platform,其他的比如shared等,seinfo是default。
比如上面ps -Z的结果里面,OneTimeInitializer.apk是untrusted_app,ManagedProvisioning.apk是platform_app。

分别查看这两个app的Android.mk

packages\apps\OneTimeInitializer\Android.mk  没有定义LOCAL_CERTIFICATE,默认是shared

packages\apps\ManagedProvisioning\Android.mk    有定义LOCAL_CERTIFICATE := platform

因为ManagedProvisioning.apk有platform签名,所以seinfo是platform。

TvSettings是system_app,查看对应的参数:

packages\apps\TvSettings\Settings\Android.mk  有定义LOCAL_CERTIFICATE := platform

packages\apps\TvSettings\Settings\AndroidManifest.xml  有定义android:sharedUserId="android.uid.system"

TvSettings user是system,seinfo是platform,所以是system_app

packages\apps\ManagedProvisioning\AndroidManifest.xml 没有定义android:sharedUserId="android.uid.system"

所以ManagedProvisioning虽然seinfo是platform,但是user不是system,因此只是platform_app,而不是system_app。

4.app对应的te文件

[java] view plain copy  
  1. # Write to properties
  2. unix_socket_connect(system_app, property, init)
  3. allow system_app debug_prop:property_service set;
  4. allow system_app net_radio_prop:property_service set;
  5. allow system_app system_radio_prop:property_service set;
  6. auditallow system_app net_radio_prop:property_service set;
  7. auditallow system_app system_radio_prop:property_service set;
  8. allow system_app system_prop:property_service set;
  9. allow system_app ctl_bugreport_prop:property_service set;
  10. allow system_app logd_prop:property_service set;

总结:

在引入SEAndroid后,app开发需要注意需要哪些权限,根据配置(shareuid和签名)来决定domain,从而决定权限大小。

Android 7.0 SEAndroid app权限配置相关推荐

  1. 安卓设置keychain_Android 7.0 SEAndroid app权限配置方法

    1.SEAndroid app分类 SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型): 1)untrusted_app 第三方app,没 ...

  2. android 7.0文件读写权限配置

    在gradle中指定applicationId,这里也会跟着变了AdroidManifest.xml android:authorities="${applicationId}.filePr ...

  3. linux 禁止app权限,SELinux文件访问安全策略和app权限配置

    SELinux文件访问安全策略和app权限配置 Android开发 基于android6.0版本的SELinux文件访问安全策略 在android6.0以后的版本,google采用了SELinux的文 ...

  4. android 动态获取权限有哪些,Android 6.0+ 动态获取权限

    Android 6.0+ 动态获取权限 这里有一个现成的库,可以直接拿来用.方便简单 1.向app下的gradle添加依赖: dependencies{ // android 6.0+ 动态获取权限 ...

  5. Android 8.0 运行时权限策略变化和适配方案

    Android8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过AndroidStudio3.0 Canary版本下载Android O最新的系统映像的Developer Pr ...

  6. 谈谈Android 6.0 的动态权限管理

    Android适配系列: Android 6.0 的动态权限管理 Android 7.0脱坑指南 Android 8.0适配指北 Android 9.0 适配指南 1.前言 大家都知道Android ...

  7. uni-app App权限配置

    UNI-APP 打包app权限配置 权限 名称 描述 android.permission.ACCESS_CHECKIN_PROPERTIES 访问登记属性 读取或写入登记check-in数据库属性表 ...

  8. Android 9.0模拟器root权限获取

    Android 9.0在获取权限时报如下错误 remount of the / superblock failed: Permission denied remount failed 解决方法为: 1 ...

  9. Android 9.0 三方app whatsapp 拍照预览模糊

    之前在进行项目开发时,有碰到 Android 9.0 三方app whatsapp 拍照预览分辨率过低 现象,但是拍照出来的照片是清晰的, 查看log发现priview-size过低导致预览模糊,而p ...

最新文章

  1. python网络爬虫初识_python爬虫(一)初识爬虫
  2. Python中dict用法详解
  3. 如何在Centos 7上用Logrotate管理日志文件
  4. Java Web 编程入门知识
  5. VC++深入详解 孙鑫 高清PDF + 配套视频下载
  6. python字符串连接的三种方法及其效率、适用场景详解
  7. Nodejs中获取get请求传过来的参数_note
  8. java如何调用脚本_Java如何调用脚本的特定功能?
  9. 1.3 Zend_Acl (3)
  10. linux内存管理实验,Linux内存管理机制研究
  11. 数字开头的字符可能有冒号可能没有,以分号分隔成数组
  12. ZOJ 3987 秦皇岛现场赛G题 java
  13. 小米官网首页(html+css+JavaScript)
  14. Activity透明主题导致behind Activity重绘的解决方法
  15. Latex特殊符号、公式、颜色整合
  16. html做键盘,用html+js+css做一个模拟键盘
  17. [附源码]java毕业设计新能源汽车租赁管理系统
  18. 【自动驾驶】缓和曲线---clothoid回旋曲线
  19. python中description_python中cursor.description什么意思
  20. jstack中的nid的含义

热门文章

  1. Ubuntu中网络编程的环境配置
  2. Flex 国际化使用
  3. 接 嵌入式设备上的Linux系统开发
  4. Kdb+和Q语言使用-银行系统
  5. gim-实时通讯框架
  6. 服务器运算性能,服务器性能计算公式(20191116215459).pdf
  7. zblog修改上传服务器,【记录有用】ZBlog备份、恢复与搬家(换空间换服务器)方法...
  8. Maven - settings.xml里的offline节点的作用
  9. 40. Combination Sum II
  10. linux常用文本编缉命令(strings/sed/awk/cut/uniq/sort)