最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Android應(yīng)用沙盒機(jī)制

 更新時間:2021年04月23日 08:28:29   作者:小路  
這篇文章主要介紹了Android應(yīng)用沙盒機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下

前言

Android使用沙盒來保護(hù)用戶不受惡意應(yīng)用的侵害,同時也將應(yīng)用隔離開來,防止他們互相訪問其數(shù)據(jù),本文主要對Android應(yīng)用沙盒中的幾種技術(shù)做簡要的總結(jié)。

一、Android應(yīng)用DAC沙盒

  • 稍微了解Android一點(diǎn)的人都知道,Android上的App并不像Linux上的用戶程序那樣,啟動應(yīng)用的uid默認(rèn)就是登錄用戶的uid,除非你使用sudo或者setuid等機(jī)制。而是每個Android應(yīng)用都對應(yīng)了一個uid,也就是一個用戶,通過Linux系統(tǒng)的DAC機(jī)制將應(yīng)用的數(shù)據(jù)嚴(yán)格隔離開來。
  • Android并沒有使用/etc/passwd配置文件以及useradd、usermod和userdel等二進(jìn)制來管理用戶,這些東西對Android來說過于復(fù)雜。實(shí)際上Android應(yīng)用到uid的映射是由PackageManagerService完成的,也就是PMS,并且存儲在/data/system/packages.xml中。
  • 將Android應(yīng)用使用DAC隔離開之后,如果應(yīng)用要訪問任何系統(tǒng)資源,便會被拒絕,所以Android設(shè)計了應(yīng)用權(quán)限機(jī)制來向應(yīng)用提供訪問系統(tǒng)資源的通道,同時保護(hù)系統(tǒng)資源不被濫用。
  • 下面是在Pixel 2 XL (RP1A.201005.004.A1) 上面的一些例子
u:r:untrusted_app:s0:c161,c256,c512,c768 u0_a161 16613 887 14608676 86088 0                  0 S com.google.android.apps.photos
u:r:untrusted_app:s0:c138,c256,c512,c768 u0_a138 17204 888 1402772 138956 0                  0 S com.android.chrome

可以看到相冊應(yīng)用的用戶為u0_a161,而Chrome瀏覽器應(yīng)用的用戶為u0_a138

二、Android應(yīng)用權(quán)限

Android應(yīng)用權(quán)限的核心類型分為四種:普通權(quán)限、危險權(quán)限、簽名權(quán)限、簽名或系統(tǒng)權(quán)限

權(quán)限類型 權(quán)限行為
普通權(quán)限(Normal) 普通權(quán)限是只需要在AndroidManifest.xml中聲明后就可以使用的權(quán)限。
危險權(quán)限(dangerous) 危險權(quán)限除了需要在AndroidManifest.xml中聲明之外,在Android 6.0或更高版本還需要使用動態(tài)權(quán)限API進(jìn)行申請,并且用戶點(diǎn)擊同意之后才能使用;在Android 5.1以及更早版本,會在安裝時單獨(dú)列出危險權(quán)限以特別提醒用戶。注意,如果自定義權(quán)限設(shè)置為了危險權(quán)限,無論Android版本是多少都只是會在安裝時單獨(dú)列出危險權(quán)限。
簽名權(quán)限(signature) 簽名權(quán)限僅會授予給與定義這個權(quán)限的包相同簽名的應(yīng)用。
簽名或系統(tǒng)權(quán)限(signatureOrSystem) signature|privileged的舊同義詞。簽名或系統(tǒng)權(quán)限與簽名權(quán)限唯一的區(qū)別就是,簽名或系統(tǒng)權(quán)限也允許授予給特權(quán)應(yīng)用(priv_app),該字段現(xiàn)已棄用。

在自定義權(quán)限中,經(jīng)常使用簽名權(quán)限來保護(hù)敏感的接口,使其只能被可信的應(yīng)用調(diào)用——那些具備和定義權(quán)限者相同簽名的應(yīng)用。

三、應(yīng)用信息的存儲

應(yīng)用信息的存儲上文已經(jīng)提到,位于/data/system/packages.xml中,這里面存儲了應(yīng)用的各種信息,下面是一個示例:

<package name="com.android.storagemanager" codePath="/system/priv-app/StorageManager" nativeLibraryPath="/system/priv-app/StorageManager/lib" publicFlags="541605445" privateFlags="8" ft="165151eba60" it="165151eba60" ut="165151eba60" version="29" user appUseNotchMode="0" appUseSideMode="1" hwExtraFlags="0" isOrphaned="true" forceDarkMode="2">
    <sigs count="1" schemeVersion="1">
        <cert index="13" />
    </sigs>
    <perms>
        <item name="android.permission.USE_RESERVED_DISK" granted="true" flags="0" />
        <!-- ... -->
    </perms>
    <proper-signing-keyset identifier="3" />
</package>
<package name="com.android.settings" codePath="/system/priv-app/Settings" nativeLibraryPath="/system/priv-app/Settings/lib" publicFlags="675823173" privateFlags="8" ft="165151eba60" it="165151eba60" ut="165151eba60" version="10010400" sharedUser appUseNotchMode="0" appUseSideMode="1" hwExtraFlags="0" isOrphaned="true" forceDarkMode="2">
    <sigs count="1" schemeVersion="1">
        <cert index="0" />
    </sigs>
    <perms>
        <item name="android.permission.REAL_GET_TASKS" granted="true" flags="0" />
        <!-- ... -->
    </perms>
    <proper-signing-keyset identifier="1" />
</package>
  • 可以看到這個文件中存儲有很多內(nèi)容,最關(guān)鍵的信息包括應(yīng)用的uid、包名、各類路徑,以及定義和授予的權(quán)限。
  • 例如StorageManager這個應(yīng)用的uid是10036,而設(shè)置的uid是1000,也就是system的uid。

四、應(yīng)用權(quán)限的映射

  • 我們知道Android使用的是Linux內(nèi)核,而在Linux的安全模型中,如果需要訪問系統(tǒng)資源,訪問系統(tǒng)資源的用戶和進(jìn)程必須具備相應(yīng)的權(quán)限。
  • Android如何將自行定義的Android權(quán)限映射到Linux層面的權(quán)限呢?答案就位于/etc/permissions/platform.xml中,下面是該文件的節(jié)選:
<permission name="android.permission.BLUETOOTH_ADMIN" >
    <group g />
</permission>
<permission name="android.permission.BLUETOOTH" >
    <group g />
</permission>

這里顯示的就是,Android的兩個藍(lán)牙權(quán)限,分別對應(yīng)了net_bt_admin和net_bt兩個Linux組,在應(yīng)用被授予相應(yīng)的權(quán)限時,PMS會自動將應(yīng)用uid加入這兩個組中,這樣應(yīng)用就擁有了相應(yīng)系統(tǒng)資源的訪問權(quán)限了。

五、應(yīng)用的SELinux標(biāo)簽

在Android引入SELinux之后,對應(yīng)用權(quán)限的劃分更為細(xì)致,Android默認(rèn)將應(yīng)用分為四種:不可信應(yīng)用、特權(quán)應(yīng)用、平臺應(yīng)用和系統(tǒng)應(yīng)用。

SELinux標(biāo)簽 標(biāo)簽行為
不可信應(yīng)用(untrusted_app) 不可信應(yīng)用擁有最少的特權(quán),訪問系統(tǒng)資源受到嚴(yán)格限制,所有用戶安裝的應(yīng)用以及部分預(yù)裝應(yīng)用都屬于此標(biāo)簽。
特權(quán)應(yīng)用(priv-app) 特權(quán)應(yīng)用位于/system/priv-app目錄或OEM定義的其它目錄下,不可卸載,但不以system uid運(yùn)行。
平臺應(yīng)用(platform_app) 平臺應(yīng)用具備平臺簽名,但不以system uid運(yùn)行。除了AOSP和部分第三方ROM之外,幾乎所有的OEM都不會公開其平臺私鑰,所以一般情況下平臺應(yīng)用只能是OEM提供的。
系統(tǒng)應(yīng)用(system_app) 系統(tǒng)應(yīng)用既具備平臺簽名,又以system uid運(yùn)行(配置android:sharedUserId=”android.uid.system”)。使用system uid運(yùn)行意味著它們可以不受應(yīng)用沙盒的限制,并能訪問絕大部分Android框架中的系統(tǒng)資源。

下面是在Pixel 2 XL (RP1A.201005.004.A1) 上面的一些例子

可以得出以下結(jié)論:

  • Chrome在這臺手機(jī)上是untrusted_app
  • 啟動器nexuslauncher在這臺手機(jī)上是priv_app
  • systemui在這臺手機(jī)上是platform_app
  • 設(shè)置settings在這臺手機(jī)上是system_app

顯然其中只有設(shè)置是以system uid運(yùn)行的,其它進(jìn)程使用的都是普通的應(yīng)用uid。

六、Android應(yīng)用MAC沙盒

上面所說的SELinux標(biāo)簽,Android在源代碼中為它們定義了不同的SELinux政策,這便實(shí)現(xiàn)了MAC層面的沙盒增強(qiáng)。

以上就是詳解Android應(yīng)用沙盒機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于Android應(yīng)用沙盒機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android下如何使用百度地圖sdk

    Android下如何使用百度地圖sdk

    百度地圖 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系統(tǒng))及以上版本設(shè)備的應(yīng)用程序接口
    2013-07-07
  • GreenDao 3.2.0 的基本使用

    GreenDao 3.2.0 的基本使用

    本文主要對GreenDao 3.2.0 的基本使用進(jìn)行詳細(xì)介紹。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Android列表點(diǎn)擊事件定義的一些思考

    Android列表點(diǎn)擊事件定義的一些思考

    大家好,本篇文章主要講的是Android列表點(diǎn)擊事件定義的一些思考,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android TV listview及焦點(diǎn)處理

    Android TV listview及焦點(diǎn)處理

    這篇文章主要介紹了Android TV listview及焦點(diǎn)處理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android Studio導(dǎo)入so文件到項目中的實(shí)例詳解

    Android Studio導(dǎo)入so文件到項目中的實(shí)例詳解

    這篇文章主要介紹了Android Studio導(dǎo)入so文件到項目中的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Android 3.0引入的異步加載機(jī)制Loader

    Android 3.0引入的異步加載機(jī)制Loader

    Loader裝載器從android3.0開始引進(jìn)。它使得在activity或fragment中異步加載數(shù)據(jù)變得簡單。下面我們就來詳細(xì)講解下
    2017-12-12
  • Android中多個ContentProvider的初始化順序詳解

    Android中多個ContentProvider的初始化順序詳解

    在日常Android開發(fā)中經(jīng)常會寫一些sdk來供他人或者自己調(diào)用,一般這些sdk都涉及到初始化,下面這篇文章主要給大家介紹了關(guān)于Android中多個ContentProvider的初始化順序的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Android視圖控件架構(gòu)分析之View、ViewGroup

    Android視圖控件架構(gòu)分析之View、ViewGroup

    這篇文章主要為大家詳細(xì)介紹了Android視圖控件架構(gòu)分析之View、ViewGroup,感興趣的朋友可以參考一下
    2016-05-05
  • 一文解析Android系統(tǒng)SELinux

    一文解析Android系統(tǒng)SELinux

    SELinux是一種加強(qiáng)文件安全的一種策略,可以更好地保護(hù)我們的Android系統(tǒng), 比如限制系統(tǒng)服務(wù)的訪問權(quán)限、控制應(yīng)用對數(shù)據(jù)和系統(tǒng)日志的訪問等措施,這篇文章主要介紹了Android系統(tǒng)SELinux詳解,需要的朋友可以參考下
    2025-02-02
  • Android 使用Intent傳遞數(shù)據(jù)的實(shí)現(xiàn)思路與代碼

    Android 使用Intent傳遞數(shù)據(jù)的實(shí)現(xiàn)思路與代碼

    Intent是Android中一個非常重要的概念,跟這個詞的本意(意圖,目的)一樣,這個類在Android中的作用就是要調(diào)用某個組建去做某一件事,接下來詳細(xì)介紹,感興趣的朋友可以參考下
    2013-01-01

最新評論

靖边县| 西藏| 商洛市| 江孜县| 九台市| 绩溪县| 孝昌县| 凯里市| 康定县| 昌吉市| 东光县| 新宾| 正定县| 定州市| 沽源县| 阳泉市| 长岛县| 泉州市| 南通市| 常州市| 陇川县| 江油市| 团风县| 涞水县| 始兴县| 长岛县| 高邑县| 文昌市| 赣榆县| 景洪市| 台前县| 青浦区| 洛扎县| 卢湾区| 延边| 松溪县| 云南省| 合山市| 金昌市| 杭州市| 涟水县|