Le funzionalità consentono ai processi Linux di eliminare la maggior parte dei privilegi simili a root, mantenendo al contempo il sottoinsieme di privilegi di cui hanno bisogno per svolgere la loro funzione. L'implementazione originale delle funzionalità impediva ai processi con fork+exec di ereditare le funzionalità, a meno che i file in esecuzione non avessero funzionalità di file configurate. Le funzionalità dei file, a loro volta, rappresentano un rischio per la sicurezza poiché qualsiasi processo che esegue un file con funzionalità dei file può acquisire queste funzionalità.
Le funzionalità Ambient consentono ai servizi di sistema avviati da init di configurare le funzionalità nei propri file .rc
, raccogliendo la configurazione in un unico file anziché suddividerla nel file fs_config.c
. Ciò significa che per qualsiasi servizio avviato da
init, puoi utilizzare il file .rc
associato al servizio per
configurare le funzionalità per quel servizio.
Le funzionalità Ambient sono il meccanismo preferito per impostare le funzionalità
per i servizi avviati da init (questo metodo mantiene tutti gli aspetti della configurazione
del servizio in un unico file .rc
). Ti consigliamo di utilizzare le funzionalità di ambient invece di configurare le funzionalità del sistema di file utilizzando la sezione caps nei file config.fs
.
Quando imposti le funzionalità per i servizi non avviati da init,
continua a configurare le funzionalità del file system utilizzando
fs_config.c
.
Attivare le funzionalità Ambient
Per attivare le funzionalità di ambient per un determinato servizio, utilizza la parola chiave
capabilities
in init. Per informazioni dettagliate sul linguaggio di init corrente, consulta il file README.md di init.
Ad esempio, per attivare le funzionalità Ambient per il servizio AOSP
wificond
, il
file.rc
per il servizio wificond
configura l'utente e i gruppi appropriati e assegna al servizio le funzionalità specificate utilizzando la
keyword capabilities
:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
Implementazione di riferimento
L'implementazione di riferimento è il kernel comune di Android https://android.googlesource.com/kernel/common/
Patch obbligatorie
Le patch richieste sono state sottoposte a backport a tutti i branch del kernel Android comuni pertinenti.
La patch principale per le funzionalità di contesto https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 è stata sottoposta a backport in:
- android-3.18:
- android-4.1:
Una piccola correzione di sicurezza https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 è stata backportata in:
- android-3.18:
- android-4.1:
Convalida
I test delle unità Bionic includono i test delle unità per le funzionalità Ambient. Inoltre, l'utilizzo della parola chiave "capabilities" in Android init per un servizio e la verifica che il servizio riceva le funzionalità previste consentono di eseguire test di runtime di questa funzionalità.