SELinux app权限配置

    xiaoxiao2021-03-25  159

    SELinux app权限配置

    3735人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: android移动开发(57) 作者同类文章 X

    目录(?)[+]

    SEAndroid app分类seapp_contexts定义user和seinfo判定方式app对应的te文件

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

    external\sepolicy\seapp_contexts

    [java] view plain copy print ? 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   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结果如下:

    [java] view plain copy print ? 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   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由external\sepolicy\mac_permissions.xml决定,内容如下:

    [java] view plain copy print ? <!-- Platform dev key in AOSP -->  <signer signature="@PLATFORM" >    <seinfo value="platform" />  </signer>    <!-- All other keys -->  <default>    <seinfo value="default" />  </default>   <!-- 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  ->  external\sepolicy\system_app.te untrusted_app ->  external\sepolicy\untrusted_app.te platform_app  ->  external\sepolicy\platform_app.te 对应的权限,通过allow语句给予,比如只有system_app才可以设置prop: [java] view plain copy print ? # 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;   # 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,从而决定权限大小。 顶 3 踩 0     上一篇android pm命令实现 下一篇SELinux配置property

    我的同类文章

    android移动开发(57) http://blog.csdn.net •UML类图几种关系的总结2017-02-03阅读22 •JACK编译器配置2016-07-06阅读2246 •查看tcp/udp端口占用命令2016-04-25阅读731 •android pm命令实现2016-03-19阅读1818 •android 6.0 SystemUI源码分析(6)-StorageNotification介绍2016-03-13阅读1904 •AudioFlinger学习笔记12016-08-13阅读328 •[android6.0]添加System Jar记录2016-06-30阅读778 •SELinux配置property2016-03-23阅读897 •android 5.1 非STR待机流程2016-03-16阅读1107 •android 6.0 SystemUI源码分析(5)-PowerUI介绍2016-03-12阅读1276 更多文章
    转载请注明原文地址: https://ju.6miu.com/read-9475.html

    最新回复(0)