Funkcje trybu nieaktywnego

Możliwości pozwalają procesom w systemie Linux zrezygnować z większości uprawnień podobnych do uprawnień roota, zachowując jednocześnie podzbiór uprawnień wymaganych do wykonywania funkcji. Pierwotna implementacja uprawnień uniemożliwiała procesom rozwidlonym i wykonanym za pomocą funkcji fork+exec dziedziczenie uprawnień, chyba że pliki wykonywane miały skonfigurowane uprawnienia pliku. Z kolei możliwości plików stanowią zagrożenie dla bezpieczeństwa, ponieważ każdy proces wykonujący plik z możliwościami plików może je uzyskać.

Funkcje otoczenia umożliwiają usługom systemowym uruchamianym przez init konfigurowanie uprawnień w plikach .rc, dzięki czemu konfiguracja jest zawarta w jednym pliku zamiast być rozdzielona 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 usługą, aby skonfigurować jej funkcje.

Możliwości otoczenia to preferowany mechanizm ustawiania możliwości usług uruchamianych przez init (ta metoda zachowuje wszystkie aspekty konfiguracji usługi w jednym pliku .rc). Zalecamy korzystanie z możliwości związanych z otoczeniem zamiast konfigurowania możliwości systemu plików za pomocą sekcji caps w plikach config.fs.

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

Włączanie funkcji otoczenia

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

Na przykład, aby włączyć funkcje 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

Implementacją referencyjną jest 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 funkcji ambientowych https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 została przeniesiona do starszych wersji:

Mała poprawka zabezpieczeń https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 została przeniesiona do starszej wersji w:

Weryfikacja

Testy jednostkowe Bionic obejmują testy jednostkowe dotyczące funkcji otoczenia. Poza tym użycie słowa kluczowego „capabilities” w procesie inicjowania usługi w Androidzie, a następnie sprawdzenie, czy usługa uzyskuje oczekiwane możliwości, umożliwi testowanie tej funkcji w czasie działania.