能力可讓 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 已回溯至以下版本:
- android-3.18:
- android-4.1:
小型安全性修正程式 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 已回移至以下版本:
- android-3.18:
- android-4.1:
驗證
Bionic 單元測試包含環境功能的單元測試。此外,在 Android 服務初始化中使用「capabilities」關鍵字,然後檢查服務是否取得預期的功能,即可進行這項功能的執行階段測試。