Capacità ambientali

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à rendeva impossibile per i processi fork+exec ereditare le funzionalità a meno che i file eseguiti non avessero configurato le funzionalità dei file. Le funzionalità dei file, a loro volta, presentano un rischio per la sicurezza poiché qualsiasi processo che esegue un file con funzionalità dei file sarà in grado di acquisire tali funzionalità.

Le funzionalità ambientali consentono ai servizi di sistema lanciati da init di configurare le funzionalità nei propri file .rc , portando la configurazione in un singolo file invece di dividere la configurazione nel file fs_config.c . Ciò significa che per qualsiasi servizio avviato da init è possibile utilizzare il file .rc associato al servizio per configurare le funzionalità per quel servizio.

Le capacità ambientali sono il meccanismo preferito per impostare le capacità per i servizi lanciati da init (questo metodo mantiene tutti gli aspetti per la configurazione del servizio in un singolo file .rc ). Consigliamo 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 funzionalità del file system utilizzando fs_config.c .

Abilitazione delle funzionalità ambientali

Per abilitare le funzionalità ambientali per un determinato servizio, utilizzare la parola capabilities in init. Per i dettagli sulla lingua 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 configura l'utente e i gruppi appropriati e fornisce al servizio le funzionalità specificate utilizzando la parola chiave 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 richieste

È stato effettuato il backport delle patch richieste su tutti i rami comuni del kernel Android rilevanti.

La patch principale delle funzionalità ambientali https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 è stata sottoposta a backport in:

Una piccola correzione di sicurezza https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 è stata sottoposta a backport in:

Validazione

I test unitari bionici includono test unitari per le capacità ambientali. Oltre a ciò, utilizzare la parola chiave "capabilities" in Android init per un servizio e quindi verificare che il servizio ottenga le funzionalità previste consentirebbe il test di runtime di questa funzionalità.