Funkcje trybu nieaktywnego

Możliwości pozwalają procesom w Linuksie na rezygnację z większości uprawnień roota przy jednoczesnym zachowaniu podzbioru uprawnień wymaganych do wykonywania ich funkcji. Pierwotna implementacja możliwości uniemożliwiała procesom fork+exec'd dziedziczenie możliwości, chyba że pliki wykonywane miały skonfigurowane możliwości plików. Możliwości plików z kolei stanowią zagrożenie bezpieczeństwa ponieważ każdy proces wykonujący plik z możliwościami plików może uzyskać te możliwości.

Możliwości otoczenia pozwalają usługom systemowym uruchamianym przez init na konfigurowanie możliwości w plikach .rc, co umożliwia umieszczenie konfiguracji w jednym pliku zamiast dzielenia jej na plik fs_config.c. Oznacza to, że w przypadku każdej usługi uruchamianej przez init możesz użyć pliku .rc powiązanego z tą usługą, aby skonfigurować jej możliwości.

Możliwości otoczenia to preferowany mechanizm ustawiania możliwości dla usług uruchamianych przez init (ta metoda pozwala zachować wszystkie aspekty konfiguracji usługi w jednym .rc pliku). Zalecamy używanie możliwości otoczenia zamiast konfigurowania możliwości systemu plików za pomocą sekcji caps w config.fs plikach.

Podczas ustawiania możliwości usług nieuruchamianych przez init, nadal konfiguruj możliwości systemu plików za pomocą fs_config.c.

Włączanie możliwości otoczenia

Aby włączyć możliwości otoczenia dla danej usługi, użyj słowa kluczowego capabilities w init. Aktualne informacje o języku init znajdziesz w pliku README.md.

Na przykład, aby włączyć możliwości otoczenia dla usługi AOSP wificond, plik .rc dla usługi wificond konfiguruje odpowiedniego użytkownika i grupy oraz przyznaje usłudze określone możliwości za pomocą słowa kluczowego capabilities:

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

Implementacja referencyjna

Implementacja referencyjna to wspólne jądro Androida https://android.googlesource.com/kernel/common/

Wymagane poprawki

Wymagane poprawki zostały przeniesione do wszystkich odpowiednich gałęzi wspólnego jądra Androida.

Główna poprawka dotycząca możliwości otoczenia https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 została przeniesiona do:

Niewielka poprawka bezpieczeństwa https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 została przeniesiona do:

Weryfikacja

Testy jednostkowe Bionic obejmują testy jednostkowe możliwości otoczenia. Ponadto użycie słowa kluczowego „capabilities” w init Androida dla usługi, a następnie sprawdzenie, czy usługa uzyskuje oczekiwane możliwości, umożliwi testowanie tej funkcji w czasie działania.