Możliwości pozwalają procesom w Linuksie na rezygnację z większości uprawnień roota przy jednoczesnym zachowaniu podzbioru uprawnień wymaganych do wykonywania ich funkcji. Pierwotna implementacja możliwości uniemożliwiała procesom fork+exec'd dziedziczenie możliwości, chyba że pliki wykonywane miały skonfigurowane możliwości plików. Możliwości plików z kolei stanowią zagrożenie bezpieczeństwa ponieważ każdy proces wykonujący plik z możliwościami plików może uzyskać te możliwości.
Możliwości otoczenia pozwalają usługom systemowym uruchamianym przez init na konfigurowanie
możliwości w plikach .rc, co umożliwia umieszczenie konfiguracji w
jednym pliku zamiast dzielenia jej na
plik fs_config.c. Oznacza to, że w przypadku każdej usługi uruchamianej przez
init możesz użyć pliku .rc powiązanego z tą usługą, aby
skonfigurować jej możliwości.
Możliwości otoczenia to preferowany mechanizm ustawiania możliwości
dla usług uruchamianych przez init (ta metoda pozwala zachować wszystkie aspekty konfiguracji usługi
w jednym .rc pliku). Zalecamy używanie możliwości otoczenia zamiast konfigurowania możliwości systemu plików za pomocą sekcji caps w config.fs plikach.
Podczas ustawiania możliwości usług nieuruchamianych przez init,
nadal konfiguruj 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. Aktualne informacje o języku init
znajdziesz w pliku
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 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_ADMINImplementacja 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 gałęzi wspólnego 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 do:
- android-3.18:
- android-4.1:
Niewielka poprawka bezpieczeństwa https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 została przeniesiona do:
- android-3.18:
- android-4.1:
Weryfikacja
Testy jednostkowe Bionic obejmują testy jednostkowe możliwości otoczenia. Ponadto 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 testowanie tej funkcji w czasie działania.