Funcionalidades de ambiente

Essas funcionalidades permitem que os processos do Linux abandonem a maioria dos privilégios de raiz, enquanto e mantendo o subconjunto de privilégios necessários para executar a função. A implementação original dos recursos impossibilitou as operações "fork+exec" para herdar capacidades, a menos que os arquivos em execução tenham recursos configurados. Os recursos dos arquivos, por sua vez, representam um risco para a segurança. já que qualquer processo que execute um arquivo com capacidades de arquivo esses recursos.

Os recursos de ambiente permitem que os serviços do sistema iniciados pelo init configurem recursos nos arquivos .rc, o que leva a configuração um único arquivo em vez de dividir as configurações arquivo fs_config.c. Isso significa que, para qualquer serviço lançado init, é possível usar o arquivo .rc associado ao serviço para e configurar recursos para esse serviço.

As funcionalidades de ambiente são o mecanismo preferencial para definir recursos para serviços iniciados pelo init (este método mantém todos os aspectos do serviço em um único arquivo .rc). Recomendamos o uso do ambiente recursos em vez de configurando arquivo recursos do sistema usando a seção de limites em arquivos config.fs.

Ao configurar recursos para serviços não iniciados pelo init, continuar configurando as funcionalidades do sistema de arquivos fs_config.c

Ativar recursos de ambiente

Para ativar os recursos de ambiente para um determinado serviço, use o evento Palavra-chave capabilities no init. Para o idioma init atual mais detalhes, consulte README.md do init.

Por exemplo, para ativar recursos de ambiente para o serviço AOSP wificond, o Arquivo.rc para o serviço wificond, configura a propriedade usuário e grupos e fornece ao serviço os recursos especificados usando a capabilities palavra-chave:

service wificond /system/bin/wificond
    class main
    user wifi
    group wifi net_raw net_admin
    capabilities NET_RAW NET_ADMIN

Implementação de referência

A implementação de referência é o kernel comum do Android https://android.googlesource.com/kernel/common/

Patches obrigatórios

Os patches necessários foram backport para todos os kernels comuns do Android relevantes galhos.

O patch de recursos de ambiente principal https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 passou por backport em:

Uma pequena correção de segurança: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 passou por backport em:

Validação

Biônico os testes de unidade incluem testes de unidade para recursos de ambiente. Além disso, usar as "capacidades" palavra-chave no comando "init" do Android para um serviço o serviço recebe os recursos esperados permitiria o teste do ambiente de execução esse recurso.