Le funzionalità consentono ai processi Linux di eliminare la maggior parte dei privilegi di tipo root, mantenendo il sottoinsieme di privilegi necessari per svolgere la propria funzione. L'implementazione originale delle funzionalità impediva ai processi fork+exec'd di ereditare le funzionalità, a meno che i file in esecuzione non avessero funzionalità di file configurate. A loro volta, le funzionalità dei file presentano un rischio per la sicurezza poiché qualsiasi processo che esegue un file con funzionalità di file può acquisire queste funzionalità.
Le funzionalità ambientali consentono ai servizi di sistema avviati da init di configurare
le funzionalità nei file .rc, portando 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à ambientali 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 .rc file). Ti consigliamo di utilizzare le funzionalità ambientali
anziché
configurare le funzionalità del file
system utilizzando la sezione caps in config.fs file.
Quando imposti le funzionalità per i servizi non avviati da init,
continua a configurare le funzionalità del file system utilizzando
fs_config.c.
Abilitare le funzionalità ambientali
Per abilitare le funzionalità ambientali per un determinato servizio, utilizza la
capabilities parola chiave in init. Per i dettagli sul linguaggio init attuale, consulta il
file README.md di init.
Ad esempio, per abilitare le funzionalità ambientali per il servizio AOSP
wificond, il
.rc file
per il servizio wificond configura l'utente e i gruppi appropriati e assegna al servizio le funzionalità specificate utilizzando la
capabilities parola chiave:
service wificond /system/bin/wificond
class main
user wifi
group wifi net_raw net_admin
capabilities NET_RAW NET_ADMINImplementazione dei riferimenti
L'implementazione di riferimento è il kernel comune di Android https://android.googlesource.com/kernel/common/
Patch richieste
Le patch richieste sono state eseguite tramite backporting a tutti i rami del kernel comune di Android pertinenti.
La patch principale delle funzionalità ambientali https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 è stata eseguita tramite backporting in:
- android-3.18:
- android-4.1:
Una piccola correzione per la sicurezza https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 è stata eseguita tramite backporting in:
- android-3.18:
- android-4.1:
Convalida
I test delle unità Bionic includono test delle unità per le funzionalità ambientali. Inoltre, l'utilizzo della parola chiave "capabilities" in init di Android per un servizio e la verifica che il servizio ottenga le funzionalità previste consentirebbero di testare questa funzionalità in fase di runtime.