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:
- android-3.18:
- android-4.1:
Wprowadzono niewielką poprawkę bezpieczeństwa https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 do:
- android-3.18:
- android-4.1:
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.