Android 7.0 SEAndroid app权限配置方法

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

isSystemServer=true domain=system_server
user=system seinfo=platform domain=system_app type=system_app_data_file
user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
user=nfc seinfo=platform domain=nfc type=nfc_data_file
user=radio seinfo=platform domain=radio type=radio_data_file
user=shared_relro domain=shared_relro
user=shell seinfo=platform domain=shell type=shell_data_file
user=_isolated domain=isolated_app levelFrom=user
user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
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结果如下:

u:r:system_app:s0    system 2414 1172 com.android.keychain
u:r:platform_app:s0   u0_a6  2439 1172 com.android.managedprovisioning
u:r:untrusted_app:s0   u0_a8  2460 1172 com.android.onetimeinitializer
u:r:system_app:s0    system 2480 1172 com.android.tv.settings
u:r:untrusted_app:s0   u0_a27 2504 1172 com.android.email
u:r:untrusted_app:s0   u0_a28 2523 1172 com.android.exchange
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决定,内容如下:

<!-- Platform dev key in AOSP -->
<signer signature="@PLATFORM" >
 <seinfo value="platform" />
</signer> 

<!-- All other keys -->
<default>
 <seinfo value="default" />
</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文件

system_app -> system/sepolicy/system_app.te

untrusted_app -> system/sepolicy/untrusted_app.te

platform_app -> system/sepolicy/platform_app.te

对应的权限,通过allow语句给予,比如只有system_app才可以设置prop:

# Write to properties
unix_socket_connect(system_app, property, init)
allow system_app debug_prop:property_service set;
allow system_app net_radio_prop:property_service set;
allow system_app system_radio_prop:property_service set;
auditallow system_app net_radio_prop:property_service set;
auditallow system_app system_radio_prop:property_service set;
allow system_app system_prop:property_service set;
allow system_app ctl_bugreport_prop:property_service set;
allow system_app logd_prop:property_service set; 

总结:

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

以上这篇Android 7.0 SEAndroid app权限配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Android Selinux 权限及问题

    由于现做的是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. enfo

  • Android 7.0 SEAndroid app权限配置方法

    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 < syste

  • Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw---- 1 root root 188, 0 /dev/ttyUSB0 信息显示:该设备的用户及其所属组别都是root,root的持有者对该设备具有读写权限.但是,我们的App是被排除在root之外的,总之无法读写该设备. 一个解决方案是:赋予others以读写权限.但是这样,任何其他第三方应用都可以

  • 详解Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

  • Android Studio 报错“app:processDebugResources"解决方法

    Android Studio 报错"app:processDebugResources"解决方法 Android Studio项目Build的时候报了这么一个错误: Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Pro

  • Android 7.0 运行时权限弹窗问题的解决

    Android 7.0系统在运行应用的时候,对权限做了诸多限制,normal, dangerous, signature, signatureOrSystem ,取决于保护级别,在确定是否授予权限时,系统可能采取不同的操作. normal 表示权限是低风险的,不会对系统.用户或其他应用程序造成危害: dangerous 表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限: signature 表示只有当应用程序所用数字签名与声明引权限的应用程序所用数字签名相同时,才能将权限授给它

  • Android Studio 报错“app:processDebugResources"解决方法

    Android Studio 报错"app:processDebugResources"解决方法 Android Studio项目Build的时候报了这么一个错误: Error:Execution failed for task ':app:processDebugResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Pro

  • Android 7.0行为变更 FileUriExposedException解决方法

    Android 7.0行为变更 FileUriExposedException解决方法 当我们开发关于[在应用间共享文件]相关功能的时候,在Android 7.0上经常会报出此运行时异常,那么Android 7.0以下没问题的代码,为什么跑到Android 7.0+的设备上运行就出问题了呢?,这主要来自于Android 7.0的一项[行为变更]! 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI

  • Android 使用地图时的权限请求方法

    在初始化自己位置的时候请求定位权限: Constants.ACCESS_FINE_LOCATION_COMMANDS_REQUEST_CODE是自定义的常量值==0x01 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //申请WRITE_EXTERNAL_STORAGE权限 ActivityC

  • android引导用户开启自启动权限的方法

    前言: 最近在做项目的过程中遇到了以下一个需求,虽然看起来不难实现,但是在实现的过程中遇到了各种坑,记录一下,今后方便查看!!! 需求: 用户第一次安装APP,点击授权按钮,跳转至授权的页面(不同手机跳转到不同的授权页面),用户授权成功之后,点击返回按钮,直接进入主页面 问题: 1.如何适配不同机型 2.不同机型的授权页面显示不同弹窗(比如三星显示悬浮窗,小米显示弹窗) 3.小米弹窗始终无法显示 4.在授权页面点击返回按钮,怎么直接跳转到主页面 问题1:适配不同机型 这个是借鉴的一篇博文(忘记地

  • thinkPHP5.0框架环境变量配置方法

    本文实例讲述了thinkPHP5.0框架环境变量配置方法.分享给大家供大家参考,具体如下: 允许使用环境变量配置,并且优先级别比在配置文件中要高,因为在读取配置参数的时候,首先会判断环境变量中是否存在该配置. 在开发过程中,可以在应用根目录下面的.env来模拟环境变量配置,.env文件中的配置参数定义格式采用ini方式,例如: app_debug = true app_trace = true 如果你的部署环境单独配置了环境变量,那么请删除.env配置文件,避免冲突. 环境变量配置的参数会全部转

随机推荐