时间:2021-05-21
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权限配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android7.0系统在运行应用的时候,对权限做了诸多限制,normal,dangerous,signature,signatureOrSystem,取决于保
在新版的android中(如Android7.0+),文件选择由于权限限制,Uri变化,文件资源路径格式改版等等,变得比较复杂起来,比如,得在Androidma
Android7.0行为变更FileUriExposedException解决方法当我们开发关于【在应用间共享文件】相关功能的时候,在Android7.0上经常
由于android7.0新增了动态权限,所以我们在做拍照和相册选取功能的时候,需要申请添加动态权限实现效果图:(1)在res目录下,新建xml文件夹,在xml文
本文实例讲述了Android7.0开发获取存储设备信息的方法。分享给大家供大家参考,具体如下:Android7.0开发相较之前有不少改进,具体可参考前面的文章A