Android 7.0 SEAndroid app权限配置方法

 更新时间:2018年07月30日 16:26:52   作者:慢慢的燃烧  
今天小编就为大家分享一篇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权限配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • Cocos2d-x 3.0多线程异步加载资源实例

    Cocos2d-x 3.0多线程异步加载资源实例

    手机游戏,即便是休闲类的小游戏,往往也涉及大量纹理资源、音视频资源、文件读写以及网络通信,处理的稍有不甚就会出现画面卡顿,交互不畅的情况
    2014-04-04
  • Android手机通过rtp发送aac数据给vlc播放的实现步骤

    Android手机通过rtp发送aac数据给vlc播放的实现步骤

    这篇文章主要介绍了Android手机通过rtp发送aac数据给vlc播放的实现步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-04-04
  • android实现简单左滑删除控件

    android实现简单左滑删除控件

    这篇文章主要为大家详细介绍了android实现一个简单左滑删除控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Mono for Android 实现高效的导航(Effective Navigation)

    Mono for Android 实现高效的导航(Effective Navigation)

    Android 4.0 系统定义了一系列的高效导航方式 (Effective Navigation), 主要包括标签、下拉列表、以及向上和返回等, 本文介绍如何用 Mono for Android 实现这些的导航方式
    2012-12-12
  • Android 7.0系统webview 显示https页面空白处理方法

    Android 7.0系统webview 显示https页面空白处理方法

    今天小编就为大家分享一篇Android 7.0系统webview 显示https页面空白处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • OpenGL ES渲染管线概述(一)

    OpenGL ES渲染管线概述(一)

    这篇文章主要为大家详细介绍了OpenGL ES渲染管线的简单概述,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android HandlerThread案例详解

    Android HandlerThread案例详解

    这篇文章主要介绍了Android HandlerThread案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • android开发基础教程—打电话发短信

    android开发基础教程—打电话发短信

    打电话发短信的功能已经离不开我们的生活了,记下来介绍打电话发短信的具体实现代码,感兴趣的朋友可以了解下
    2013-01-01
  • 利用Flutter制作一个会飞的菜单

    利用Flutter制作一个会飞的菜单

    flutter中自带了drawer组件,可以实现通用的菜单功能,所以本文将尝试一下通过自定义动画来实现一个会飞的菜单,感兴趣的可以了解一下
    2023-06-06
  • Android中的Handler与多线程应用实例

    Android中的Handler与多线程应用实例

    这篇文章主要介绍了Android中的Handler与多线程应用实例,本文首先解释一下handler是用来干嘛的,然后通过例子介绍其在多线程中的应用,需要的朋友可以参考下
    2015-03-03

最新评论