Możliwości pozwalają procesom systemu Linux zrezygnować z większości uprawnień roota, zachowując jednocześnie podzbiór uprawnień wymaganych do wykonywania swoich funkcji. Oryginalna implementacja możliwości uniemożliwiała procesom fork+exec dziedziczenie możliwości, chyba że wykonywane pliki miały skonfigurowane możliwości plików. Możliwości plików z kolei stanowią ryzyko bezpieczeństwa, ponieważ każdy proces wykonujący plik mający możliwości plików będzie mógł uzyskać te możliwości.
Możliwości otoczenia pozwalają usługom systemowym uruchamianym przez init konfigurować możliwości w plikach .rc
, gromadząc konfigurację w jednym pliku zamiast dzielić konfigurację 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 usług uruchamianych przez init (ta metoda przechowuje wszystkie aspekty konfiguracji usługi w jednym pliku .rc
). Zalecamy korzystanie z możliwości otoczenia zamiast konfigurowania możliwości systemu plików przy użyciu 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 możliwości otoczenia
Aby włączyć możliwości otoczenia dla danej usługi, użyj słowa kluczowego capabilities
w init. Aby uzyskać szczegółowe informacje na temat bieżącego języka inicjowania, zobacz init README.md .
Na przykład, aby włączyć możliwości otoczenia dla usługi AOSP wificond
, plik .rc dla usługi wificond
konfiguruje odpowiedniego użytkownika i grupy oraz zapewnia 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 wspólnych gałęzi jądra Androida.
Główna poprawka 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:
Walidacja
Bioniczne testy jednostkowe obejmują testy jednostkowe możliwości otoczenia. Poza tym użycie słowa kluczowego „możliwości” w inicjacji systemu Android dla usługi, a następnie sprawdzenie, czy usługa uzyskuje oczekiwane możliwości, umożliwiłoby przetestowanie tej funkcji w czasie wykonywania.