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'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_ADMIN

Implementazione 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:

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:

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.