Android 7.0 SEAndroid app权限配置方法
1.SEAndroidapp分类
SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):
1)untrusted_app第三方app,没有Android平台签名,没有system权限
2)platform_app有Android平台签名,没有system权限
3)system_app有android平台签名和system权限
从上面划分,权限等级,理论上:untrusted_app 2.seapp_contexts定义 system/sepolicy/seapp_contexts 从上面可以看出,domain和type由user和seinfo两个参数决定。 比如: user=systemseinfo=platform,domain才是system_app user=_app,可以是untrusted_app或platform_app,如果seinfo=platform,则是platform_app。 3.user和seinfo判定方式 首先看user,user可以理解为UID,例如ps-Z结果如下: 第一列是SContext,第二列是UID,只要UID是system的基本都是system_app,反过来一样。 其他的U0_XXX要么属于platform_app或untrusted_app seinfo由system/sepolicy/mac_permissions.xml决定,内容如下: 即如果签名是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" TvSettingsuser是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: 总结: 在引入SEAndroid后,app开发需要注意需要哪些权限,根据配置(shareuid和签名)来决定domain,从而决定权限大小。 以上这篇Android7.0SEAndroidapp权限配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。 声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
isSystemServer=truedomain=system_server
user=systemseinfo=platformdomain=system_apptype=system_app_data_file
user=bluetoothseinfo=platformdomain=bluetoothtype=bluetooth_data_file
user=nfcseinfo=platformdomain=nfctype=nfc_data_file
user=radioseinfo=platformdomain=radiotype=radio_data_file
user=shared_relrodomain=shared_relro
user=shellseinfo=platformdomain=shelltype=shell_data_file
user=_isolateddomain=isolated_applevelFrom=user
user=_appseinfo=platformdomain=platform_apptype=app_data_filelevelFrom=user
user=_appdomain=untrusted_apptype=app_data_filelevelFrom=user
u:r:system_app:s0system24141172com.android.keychain
u:r:platform_app:s0u0_a624391172com.android.managedprovisioning
u:r:untrusted_app:s0u0_a824601172com.android.onetimeinitializer
u:r:system_app:s0system24801172com.android.tv.settings
u:r:untrusted_app:s0u0_a2725041172com.android.email
u:r:untrusted_app:s0u0_a2825231172com.android.exchange
u:r:untrusted_app:s0u0_a725671172com.android.musicfx
#Writetoproperties
unix_socket_connect(system_app,property,init)
allowsystem_appdebug_prop:property_serviceset;
allowsystem_appnet_radio_prop:property_serviceset;
allowsystem_appsystem_radio_prop:property_serviceset;
auditallowsystem_appnet_radio_prop:property_serviceset;
auditallowsystem_appsystem_radio_prop:property_serviceset;
allowsystem_appsystem_prop:property_serviceset;
allowsystem_appctl_bugreport_prop:property_serviceset;
allowsystem_applogd_prop:property_serviceset;