SEAndroid app

SELinux app权限配置 untrusted_app http://blog.csdn.net/zhudaozhuan/article/details/50964832

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

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由external\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,查看对应的参数:
有定义LOCAL_CERTIFICATE := platform
有定义android:sharedUserId=”android.uid.system”
TvSettings user是system,seinfo是platform,所以是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:

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,从而决定权限大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值