Funzionalità Ambient

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 di ereditare le funzionalità, a meno che i file eseguiti non avessero funzionalità di file configurate. Le funzionalità dei file, a loro volta, presentano un rischio per la sicurezza poiché qualsiasi processo che esegue un file con funzionalità dei file può ottenere queste funzionalità.

Le funzionalità ambientali consentono ai servizi di sistema avviati da init di configurare le funzionalità nei file .rc, riunendo 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 file .rc). Ti consigliamo di utilizzare le funzionalità ambientali anziché configurare le funzionalità del file system 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à ambientali per un determinato servizio, utilizza la parola chiave capabilities in init. Per i dettagli sulla lingua iniziale attuale, consulta il file README.md di init.

Ad esempio, per attivare le funzionalità ambientali per il servizio AOSP wificond, il file.rc per il servizio wificond configura l'utente e i gruppi appropriati e concede 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

Le patch richieste sono state eseguite su tutte le filiali del kernel comune Android pertinenti.

La patch principale per le funzionalità ambientali https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 è stata eseguita in:

È stato eseguito il backporting di una piccola correzione della sicurezza https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 in:

Convalida

I test delle unità Bionic includono test delle unità per le funzionalità ambientali. Inoltre, l'utilizzo della parola chiave "capabilities" in Android init per un servizio e la verifica che il servizio ottenga le funzionalità previste consentirebbe di testare in fase di runtime questa funzionalità.