Możliwości otoczenia

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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.