Możliwości otoczenia

Możliwości pozwalają procesom Linuksa na porzucenie większości uprawnień typu root, przy jednoczesnym zachowaniu podzbioru uprawnień, których potrzebują do wykonywania swoich funkcji. Pierwotna implementacja możliwości uniemożliwiała procesom fork+exec'd dziedziczenie możliwości, chyba że uruchamiane 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 plików będzie w stanie uzyskać te możliwości.

Możliwości otoczenia umożliwiają usługom systemowym uruchamianym przez init konfigurowanie możliwości w plikach .rc , przenosząc konfigurację do jednego pliku zamiast dzielenia konfiguracji w pliku fs_config.c . Oznacza to, że dla dowolnej usługi uruchomionej przez init możesz użyć pliku .rc powiązanego z usługą, aby skonfigurować możliwości tej usługi.

Możliwości otoczenia są preferowanym mechanizmem ustawiania możliwości dla usług uruchamianych przez init (ta metoda zachowuje wszystkie aspekty konfiguracji usługi w jednym pliku .rc ). Zalecamy korzystanie z funkcji otoczenia zamiast konfigurowania funkcji systemu plików za pomocą sekcji caps 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 za pomocą fs_config.c .

Włączanie funkcji otoczenia

Aby włączyć capabilities otoczenia dla danej usługi, użyj słowa kluczowego functions w init. Szczegółowe informacje o bieżącym języku init można znaleźć w pliku README.md init .

Na przykład, aby włączyć funkcje otoczenia dla usługi wificond , plik wificond usługi wificond konfiguruje odpowiedniego użytkownika i grupy oraz nadaje 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 wspólnych gałęzi jądra Androida.

Główny patch dotyczący możliwości otoczenia https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 został przeniesiony w:

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

Walidacja

Testy jednostkowe Bionic obejmują testy jednostkowe dla możliwości otoczenia. Poza tym 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łoby przetestowanie tej funkcji w czasie wykonywania.