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:
- android-3.18:
- Android 4.1
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:
- android-3.18:
- Android 4.1
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.