Android 7.0 SEAndroid app權(quán)限配置方法
1.SEAndroid app分類(lèi)
SELinux(或SEAndroid)將app劃分為主要三種類(lèi)型(根據(jù)user不同,也有其他的domain類(lèi)型):
1)untrusted_app 第三方app,沒(méi)有Android平臺(tái)簽名,沒(méi)有system權(quán)限
2)platform_app 有Android平臺(tái)簽名,沒(méi)有system權(quán)限
3)system_app 有android平臺(tái)簽名和system權(quán)限
從上面劃分,權(quán)限等級(jí),理論上: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兩個(gè)參數(shù)決定。
比如:
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結(jié)果如下:
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,反過(guò)來(lái)一樣。
其他的U0_XXX要么屬于platform_app或untrusted_app
seinfo由system/sepolicy/mac_permissions.xml決定,內(nèi)容如下:
<!-- 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的結(jié)果里面,OneTimeInitializer.apk是untrusted_app,ManagedProvisioning.apk是platform_app。
分別查看這兩個(gè)app的Android.mk
packages\apps\OneTimeInitializer\Android.mk 沒(méi)有定義LOCAL_CERTIFICATE,默認(rèn)是shared
packages\apps\ManagedProvisioning\Android.mk 有定義LOCAL_CERTIFICATE := platform
因?yàn)镸anagedProvisioning.apk有platform簽名,所以seinfo是platform。
TvSettings是system_app,查看對(duì)應(yīng)的參數(shù):
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 沒(méi)有定義android:sharedUserId="android.uid.system"
所以ManagedProvisioning雖然seinfo是platform,但是user不是system,因此只是platform_app,而不是system_app。
4.app對(duì)應(yīng)的te文件
system_app -> system/sepolicy/system_app.te
untrusted_app -> system/sepolicy/untrusted_app.te
platform_app -> system/sepolicy/platform_app.te
對(duì)應(yīng)的權(quán)限,通過(guò)allow語(yǔ)句給予,比如只有system_app才可以設(shè)置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;
總結(jié):
在引入SEAndroid后,app開(kāi)發(fā)需要注意需要哪些權(quán)限,根據(jù)配置(shareuid和簽名)來(lái)決定domain,從而決定權(quán)限大小。
以上這篇Android 7.0 SEAndroid app權(quán)限配置方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Cocos2d-x 3.0多線(xiàn)程異步加載資源實(shí)例
手機(jī)游戲,即便是休閑類(lèi)的小游戲,往往也涉及大量紋理資源、音視頻資源、文件讀寫(xiě)以及網(wǎng)絡(luò)通信,處理的稍有不甚就會(huì)出現(xiàn)畫(huà)面卡頓,交互不暢的情況2014-04-04Android手機(jī)通過(guò)rtp發(fā)送aac數(shù)據(jù)給vlc播放的實(shí)現(xiàn)步驟
這篇文章主要介紹了Android手機(jī)通過(guò)rtp發(fā)送aac數(shù)據(jù)給vlc播放的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04android實(shí)現(xiàn)簡(jiǎn)單左滑刪除控件
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)一個(gè)簡(jiǎn)單左滑刪除控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Mono for Android 實(shí)現(xiàn)高效的導(dǎo)航(Effective Navigation)
Android 4.0 系統(tǒng)定義了一系列的高效導(dǎo)航方式 (Effective Navigation), 主要包括標(biāo)簽、下拉列表、以及向上和返回等, 本文介紹如何用 Mono for Android 實(shí)現(xiàn)這些的導(dǎo)航方式2012-12-12Android 7.0系統(tǒng)webview 顯示https頁(yè)面空白處理方法
今天小編就為大家分享一篇Android 7.0系統(tǒng)webview 顯示https頁(yè)面空白處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07android開(kāi)發(fā)基礎(chǔ)教程—打電話(huà)發(fā)短信
打電話(huà)發(fā)短信的功能已經(jīng)離不開(kāi)我們的生活了,記下來(lái)介紹打電話(huà)發(fā)短信的具體實(shí)現(xiàn)代碼,感興趣的朋友可以了解下2013-01-01Android中的Handler與多線(xiàn)程應(yīng)用實(shí)例
這篇文章主要介紹了Android中的Handler與多線(xiàn)程應(yīng)用實(shí)例,本文首先解釋一下handler是用來(lái)干嘛的,然后通過(guò)例子介紹其在多線(xiàn)程中的應(yīng)用,需要的朋友可以參考下2015-03-03