Funkcje trybu nieaktywnego

Umożliwiają one procesom Linuksa odebranie większości uprawnień roota, zachowując przy tym podzbiór uprawnień, których potrzebują do wykonywania swoich funkcji. Pierwotna implementacja możliwości uniemożliwiała dziedziczenie możliwości przez procesy fork+exec, chyba że pliki były uruchamiane z właściwymi możliwościami. Zdolności plików stanowią z kolei zagrożenie dla bezpieczeństwa, ponieważ każdy proces wykonujący plik z takimi zdolnościami może je uzyskać.

Funkcje ambientowe umożliwiają usługom systemowym uruchamianym przez init konfigurowanie funkcji w plikach .rc, co pozwala na umieszczenie konfiguracji w pojedynczym pliku zamiast dzielenia konfiguracji w pliku fs_config.c. Oznacza to, że w przypadku każdej usługi uruchomionej przez init możesz użyć pliku .rc powiązanego z tą usługą, aby skonfigurować jej możliwości.

Funkcje tła to preferowany mechanizm ustawiania funkcji w przypadku usług uruchamianych przez init (ta metoda pozwala zachować wszystkie aspekty konfiguracji usługi w pojedynczym pliku .rc). Zalecamy korzystanie z funkcji ambient zamiast konfigurowania plików systemu za pomocą sekcji caps w plikach config.fs.

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

Włączanie funkcji związanych z tłem

Aby włączyć funkcje tła dla danej usługi, użyj słowa kluczowego capabilities w init. Szczegółowe informacje o obecnym języku init znajdziesz w pliku init README.md.

Na przykład, aby włączyć funkcje dźwięków otoczenia dla usługi AOSP wificond, plik.rc dla usługi wificond konfiguruje odpowiedniego użytkownika i grupy oraz przypisuje usłudze określone funkcje za pomocą parametru 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 jądra wspólnego Androida.

Główna poprawka dotycząca obsługi funkcji ambient https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 została wstecznie przeniesiona w:

Wprowadzono niewielką poprawkę bezpieczeństwa https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 do:

Weryfikacja

Testy jednostkowe dotyczące funkcji Bionic obejmują testy jednostkowe funkcji ambient. Poza tym możesz użyć słowa kluczowego „capabilities” w inicjalizacji usługi w Androidzie, a następnie sprawdzić, czy usługa ma oczekiwane możliwości. Pozwoli Ci to przetestować tę funkcję w czasie działania.