微光功能

功能可讓 Linux 程序捨棄大部分類似根目錄的權限,同時保留執行功能所需的權限子集。在原始的功能實作中,除非執行的檔案已設定檔案功能,否則 fork+exec 的程序無法繼承功能。檔案功能本身會帶來安全風險,因為執行檔案的任何程序都可能取得這些功能。

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

對於由 init 啟動的服務,建議使用 Ambient 功能設定功能 (這個方法會將服務設定的所有層面保留在單一 .rc 檔案中)。建議您使用環境功能,而不是config.fs 檔案中,使用 caps 區段設定檔案系統功能

並非由 init 啟動的服務設定功能時,請繼續使用 fs_config.c 設定檔案系統功能。

啟用微光功能

如要為特定服務啟用環境功能,請在 init 中使用 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 init 中為服務使用「capabilities」關鍵字,然後檢查服務是否取得預期功能,即可在執行階段測試這項功能。