谷歌致力於推進種族平等的黑人社區。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

特權權限白名單

特權的應用程序是位於系統中的應用程序priv-app目錄上的系統圖像分區中的一個。用於Android的版本的分區

  • 的Android 8.1和更低- /system
  • 機器人9和更高- /system, /product, /vendor

在這一頁中, /etc/permissions/priv-app解析為partition /etc/permissions/priv-app

從歷史上看,設備製造商幾乎沒有控制權,其簽名|特權權限可授予特權的應用程序。在安卓8.0開始,製造商必須明確授予在系統配置XML文件特權權限/etc/permissions目錄。由於Android的9,實現者必須明確授予或拒絕所有特權權限或設備無法啟動。

privapp-permissions.xml文件只能授予或拒絕對同一分區特權的應用程序的權限。例如,如果在一個應用程序/vendor分區請求特權權限,該請求可以只被授予或通過拒絕privapp-permissions.xml文件這也是上/vendor

添加白名單

針對應用許可的白名單可以在單個XML或在位於多個XML文件中列出frameworks/base/etc/permissions目錄如下:

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

沒有組織的內容沒有嚴格的規則。設備實現能夠確定內容結構,只要從所有應用/system/priv-app被列入白名單。例如,谷歌有谷歌開發的所有特權應用單一的白名單,並建議採取下列組織:

  • 那些已經包含在Android開源項目(AOSP)樹的應用程序的權限列在/etc/permissions/privapp-permissions-platform.xml
  • 對於谷歌應用程序的權限列在/etc/permissions/privapp-permissions-google.xml
  • 對於其他應用程序,使用以下形式的文件: /etc/permissions/privapp-permissions- DEVICE_NAME .xml

生成白名單

自動生成白名單的所有系統映像上的哪些應用可以在使用AOSP命令行工具development/tools/privapp_permissions/privapp_permissions.py 。為了生成特定於設備的的初始版本privapp-permissions.xml

  1. 建立系統映像:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j 
  2. 運行privapp_permissions.py腳本生成一個privapp-permissions.xml ,其中列出了簽名文件|需要的特權權限列入白名單:
    development/tools/privapp_permissions/privapp_permissions.py
    此工具打印XML內容既可以用作一個單一的文件,或者分割成在多個文件/etc/permissions目錄路徑。如果該設備已經包括白名單中/etc/permissions目錄,該工具只打印只有差異(如缺少簽名|你需要添加到白名單特權權限)。這也是審計目的有用:當添加應用程序的新版本,該工具檢測到所需的額外權限。
  3. 生成的文件複製到相應/etc/permissions目錄,其中的系統啟動時讀取文件。

自定義白名單

AOSP包括白名單的實現需要可定制。對於包含在AOSP應用程序的權限已列入白名單的/etc/permissions/privapp-permissions-platform.xml

默認情況下, privapp_permissions.py腳本生成的輸出,可自動授予的特權應用程序要求的任何許可。如果有應該被拒絕的權限,編輯使用,而不是一個“許可”標籤的“拒絕許可權”標籤的XML。例:

<!--
    This XML file declares which signature|privileged permissions should be
    granted to privileged apps that come with the platform
    -->
    <permissions>
<privapp-permissions package="com.android.backupconfirm">
    <permission name="android.permission.BACKUP"/>
    <permission name="android.permission.CRYPT_KEEPER"/>
</privapp-permissions>
<privapp-permissions package="com.android.cellbroadcastreceiver">
    <!-- don't allow application to interact across users -->
    <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
    <permission name="android.permission.MANAGE_USERS"/>
    <permission name="android.permission.MODIFY_PHONE_STATE"/>
    <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
    <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
</privapp-permissions>
    ...

查找丟失的權限

為了尋找失踪帶來了一個新的設備時permisisons,使過渡日誌模式:

ro.control_privapp_permissions=log

違反報告在日誌文件中,但特權的權限授予依然。這樣可以使設備處於工作狀態,同時提供違規名單。這是錯誤的消息格式:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions whitelist

所有違規行為必須通過添加缺少的權限,以適當的白名單來解決。

  • 在Android 8.0和較低,受影響的應用程序不授予權限不足,即使他們是在priv-app路徑。
  • 在Android 9或更高,侵犯( 特權權限)意味著設備無法引導 。你必須明確地允許或拒絕所有特權權限

白名單強制執行

白名單到位後,能夠通過設置構建屬性運行時執行ro.control_privapp_permissions=enforce