zoukankan      html  css  js  c++  java
  • SELinux app权限配置

    摘要:1.SEAndroidapp分类SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):1)untrusted_app 第三方app,没有android平台签名,没有system权限2)platform_app  有android平台签名,没有system权限3)system_app   有android平台签名和system权限从上面划分,权限等级,理论上:                

    • 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定义 

      externalsepolicyseapp_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由externalsepolicymac_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

      packagesappsOneTimeInitializerAndroid.mk  没有定义LOCAL_CERTIFICATE,默认是shared

      packagesappsManagedProvisioningAndroid.mk    有定义LOCAL_CERTIFICATE := platform

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

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

      packagesappsTvSettingsSettingsAndroid.mk  有定义LOCAL_CERTIFICATE := platform

      packagesappsTvSettingsSettingsAndroidManifest.xml  有定义android:sharedUserId="android.uid.system"

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

      packagesappsManagedProvisioningAndroidManifest.xml 没有定义android:sharedUserId="android.uid.system"

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

      4.app对应的te文件 system_app  ->  externalsepolicysystem_app.te  untrusted_app ->  externalsepolicyuntrusted_app.te  platform_app  ->  externalsepolicyplatform_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,从而决定权限大小。
  • 相关阅读:
    团队项目成员和题目
    最大联通子数组
    站立会议5
    关于jsp之间href传参(中文)乱码问题
    站立会议4
    典型用户和用户场景描述
    站立会议3
    站立会议2
    站立会议1
    第七周学习进度情况
  • 原文地址:https://www.cnblogs.com/codeking100/p/10341007.html
Copyright © 2011-2022 走看看