Le funzionalità consentono ai processi Linux di eliminare la maggior parte dei privilegi di tipo root pur mantenendo il sottoinsieme di privilegi necessari per svolgere la propria funzione. L'implementazione originale delle funzionalità rendeva impossibile per i processi fork+exec'd 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 sarà in grado di ottenere tali capacità.
Le funzionalità ambientali consentono ai servizi di sistema avviati da init di configurare le funzionalità nei loro file .rc
, portando la configurazione in un unico file invece di dividere la configurazione 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à ambientali sono il meccanismo preferito per impostare le funzionalità per i servizi avviati da init (questo metodo mantiene tutti gli aspetti per la configurazione del servizio in un unico file .rc
). Si consiglia di utilizzare le funzionalità ambientali invece di configurare le funzionalità del file system utilizzando la sezione caps nei file config.fs
.
Quando si impostano le funzionalità per i servizi non avviati da init , continuare a configurare le capacità del file system utilizzando fs_config.c
.
Abilitazione delle capacità ambientali
Per abilitare le capabilities
ambientali per un determinato servizio, usa la parola chiave capacity in init. Per i dettagli sulla lingua di init corrente, fare riferimento a init README.md .
Ad esempio, per abilitare le funzionalità ambientali per il servizio AOSP wificond
, il file .rc per il servizio wificond
imposta l'utente e i gruppi appropriati e fornisce al servizio le capabilities
specificate utilizzando la parola chiave functions:
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 Android https://android.googlesource.com/kernel/common/
Patch richieste
Le patch richieste sono state trasferite a tutti i rami comuni del kernel Android rilevanti.
La principale patch per le funzionalità ambientali https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 è stata trasferita 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 trasferita in:
- Android-3.18:
- Android-4.1:
Convalida
I test unitari bionici includono i test unitari per le capacità ambientali. Oltre a ciò, l'utilizzo della parola chiave "capacità" in Android init per un servizio e quindi la verifica che il servizio ottenga le funzionalità previste consentirebbe il test di runtime di questa funzionalità.