Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

環境能力

功能使Linux進程可以放棄大多數類似root的特權,同時保留執行其功能所需的特權子集。功能的原始實現使fork + exec的進程無法繼承功能,除非正在執行的文件配置了文件功能。而文件功能又會帶來安全風險,因為任何執行具有文件功能的文件的進程都將能夠獲得這些功能。

環境功能允許init啟動的系統服務在其.rc文件中配置功能,從而將配置放入單個文件中,而不是在fs_config.c文件中拆分配置。這意味著對於由init啟動的任何服務,您都可以使用與該服務關聯的.rc文件來配置該服務的功能。

環境功能是為init啟動的服務設置功能的首選機制(此方法將服務配置的所有方面都保存在單個.rc文件中)。我們建議使用環境功能,而不是使用 config.fs文件中的caps部分配置文件系統功能

不是由init啟動的服務設置功能時,請繼續使用fs_config.c配置文件系統功能。

啟用環境功能

要為給定服務啟用環境功能,請在init中使用capabilities關鍵字。有關當前初始化語言的詳細信息,請參考初始化README.md

例如,要為AOSP服務wificond啟用環境功能, wificond服務的.rc文件將設置適當的用戶和組,並使用capabilities關鍵字為服務提供指定的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已在以下位置進行了移植:

驗證方式

仿生單元測試包括環境能力的單元測試。除此之外,在Android init中為服務使用“ capabilities”關鍵字,然後檢查服務是否獲得了預期的功能,將允許對該功能進行運行時測試。