Możliwości pozwalają procesom Linuksa na pozbycie się większości przywilejów root, zachowując podzbiór uprawnień, których potrzebują do wykonywania swojej funkcji. Oryginalna implementacja możliwości uniemożliwiała procesom fork + exec'd dziedziczenie możliwości, chyba że wykonywane pliki miały skonfigurowane możliwości plików. Z kolei możliwości plików stanowią zagrożenie bezpieczeństwa, ponieważ każdy proces wykonujący plik z funkcjami pliku będzie mógł je uzyskać.
Możliwości środowiska pozwalają usługom systemowym uruchamianym przez init na konfigurowanie możliwości w swoich plikach .rc
, przenosząc konfigurację do pojedynczego pliku zamiast dzielenia konfiguracji w pliku fs_config.c
. Oznacza to, że dla każdej usługi uruchamianej przez init można użyć pliku .rc
skojarzonego z usługą, aby skonfigurować możliwości tej usługi.
Możliwości otoczenia są preferowanym mechanizmem ustawiania możliwości usług uruchamianych przez init (ta metoda zachowuje wszystkie aspekty konfiguracji usługi w jednym pliku .rc
). Zalecamy używanie funkcji otoczenia zamiast konfigurowania możliwości systemu plików przy użyciu sekcji kapsli w plikach config.fs
.
Podczas ustawiania możliwości usług, które nie są uruchamiane przez init , kontynuuj konfigurowanie możliwości systemu plików przy użyciu fs_config.c
.
Włączanie funkcji otoczenia
Aby włączyć funkcje otoczenia dla danej usługi, należy skorzystać z capabilities
słów kluczowych w init. Aby uzyskać szczegółowe informacje na temat bieżącego języka init, zapoznaj się z plikiem README.md init .
Na przykład, aby włączyć funkcje otoczenia dla usług AOSP wificond
, w pliku .rc dla wificond
zestawów serwisowych jego odpowiednią użytkowników i grup oraz daje usługę określone funkcje wykorzystujące capabilities
Słowo kluczowe:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
Realizacja referencyjna
Implementacją referencyjną jest wspólne jądro Androida https://android.googlesource.com/kernel/common/
Wymagane łatki
Wymagane łatki zostały przeniesione do wszystkich odpowiednich wspólnych gałęzi jądra Androida.
Główna łatka dotycząca możliwości otoczenia https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 została przeniesiona w:
- android-3.18:
- android-4.1:
Mała poprawka bezpieczeństwa https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 została przeniesiona w:
- android-3.18:
- android-4.1:
Uprawomocnienie
Bioniczne testy jednostkowe obejmują testy jednostkowe dla możliwości otoczenia. Poza tym użycie słowa kluczowego „features” w inicjalizacji Androida dla usługi, a następnie sprawdzenie, czy usługa ma oczekiwane możliwości, umożliwiłoby testowanie tej funkcji w czasie wykonywania.