微光功能

能力可讓 Linux 程序放棄大部分類似 root 的權限,同時保留執行功能所需的權限子集。能力的原始實作方式使得分支 + 執行的程序無法繼承能力,除非執行的檔案已設定檔案能力。檔案功能反而會帶來安全性風險,因為執行具有檔案功能的檔案的任何程序都會獲得這些功能。

環境功能可讓由 init 啟動的系統服務在 .rc 檔案中設定功能,將設定納入單一檔案,而非在 fs_config.c 檔案中分割設定。也就是說,對於任何由 init 啟動的服務,您可以使用與該服務相關聯的 .rc 檔案,設定該服務的功能。

環境功能是設定由初始化啟動的服務功能的首選機制 (這個方法會在單一 .rc 檔案中保留服務設定的所有層面)。建議您使用環境功能,而不要在 config.fs 檔案中使用 caps 區段設定檔案系統功能

非由初始化程序啟動的服務設定功能時,請繼續使用 fs_config.c 設定檔案系統功能。

啟用微光功能

如要為特定服務啟用環境功能,請在初始化中使用 capabilities 關鍵字。如需瞭解目前的初始化語言詳情,請參閱 init README.md

舉例來說,如要為 AOSP 服務 wificond 啟用環境功能,wificond 服務的 .rc 檔案 會設定適當的使用者和群組,並使用 capabilities 關鍵字為服務提供指定的功能:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

參考實作

參考實作項目是 Android 常見核心 https://android.googlesource.com/kernel/common/

必要修補程式

必要的修補程式已回移至所有相關的 Android 通用核心分支。

主要環境能力修補程式 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 已回溯至以下版本:

小型安全性修正程式 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 已回移至以下版本:

驗證

Bionic 單元測試包含環境功能的單元測試。此外,在 Android 服務初始化中使用「capabilities」關鍵字,然後檢查服務是否取得預期的功能,即可進行這項功能的執行階段測試。