Restringir aplicativos específicos de acessar certos arquivos

7

Normalmente, os arquivos privados armazenados no diretório inicial de um usuário podem ser acessados por aplicativos em execução com o UID efetivo do usuário. Como posso restringir um aplicativo específico de acessar determinados arquivos privados, enquanto ainda permitir que os arquivos sejam acessados por outros aplicativos usando o AppArmor no openSUSE.

    
por isup 17.12.2013 / 12:00

2 respostas

4

O AppArmor é um Controle de Acesso Obrigatório (MAC) Linux Security Module (LSM), usado, entre outros, pelo Ubuntu e SUSE Linux. As regras de controle de acesso do AppArmor são definidas nos perfis do AppArmor em /etc/apparmor.d/ . Os perfis são simplesmente arquivos de texto, que contêm informações sobre os recursos aos quais o aplicativo pertence ao perfil.

Tipicamente, quando desenhando perfis , um deles executaria o aplicativo com o AppArmor configurado para o modo complain , no qual violações de controle de acesso são permitidas, mas registradas. Usando os logs, um seria refinar iterativamente o perfil. Quando o perfil é concluído, o AppArmor pode ser alternado para o modo enforce , no qual as regras de controle de acesso definidas no perfil são aplicadas e quaisquer tentativas de violação registradas.

O contorno de um perfil do AppArmor é semelhante ao seguinte:

#include <tunables/global>
/path/to/application {
   [...]
}

As diretivas #include permitem que declarações pertencentes a vários aplicativos sejam colocadas em um arquivo comum e incluídas no perfil de cada aplicativo relevante.

O arquivo <tunables/global> , correspondente a /etc/apparmor.d/tunables/global , por sua vez, inclui definições que devem estar disponíveis para todos os perfis. Uma dessas inclusões adicionais é /etc/apparmor/tunables/home , que junto com uma @{HOME}/** rw (ou diretiva semelhante) concede aos aplicativos acesso aos diretórios base dos usuários.

Se este for o caso, a fim de negar o acesso a certos arquivos no diretório home do usuário, seria necessário adiciona uma regra de perfil para negar explicitamente o acesso aos arquivos . Isso pode ser feito usando a diretiva deny , como no exemplo a seguir:

#include <tunables/global>
/path/to/application {
   [...]
   # Allow directory listings (i.e. 'r' on directories).
   @{HOME}/ r

   # This is needed for saving files in the home directory.
   @{HOME}/** rw

   # Revoke access to specific file
   deny /home/user/file rwa
}

O que seria negado é ler ( r ), escrever ( w ) e anexar ( a ) o acesso a /home/user/file .

Uma alternativa é adicionar os caminhos que você deseja proteger a /etc/apparmor.d/abstractions/private-files ou /etc/apparmor.d/abstractions/private-files-strict e garantir que o perfil do AppArmor de cada aplicativo a ser afetado inclua <abstractions/private-files> ou <abstraction/private-files-strict> . Esses arquivos já devem conter regras para arquivos comuns que devem ser protegidos para fins de privacidade ou outras considerações de segurança.

Para obter uma lista completa dos detalhes do modo de acesso e mais informações sobre os perfis de segurança do AppArmor, consulte o apparmor.d página de manual e Guia de Administração do Novell AppArmor (pdf) .

    
por 17.12.2013 / 14:02
1

[Em resposta à pergunta mais específica editada.]

Para restringir o acesso no AppArmor para um programa, foo, crie um perfil com a entrada

/usr/bin/foo {
    /etc/foo/* r,
}

Permite acesso de leitura aos arquivos em / etc / foo

    /etc/** 

permitiria acesso de leitura a todos os subdiretórios em / etc

Por outro lado, você pode usar

    deny /private/path rwa

para restringir o acesso a um caminho particular.

Referências

por 17.12.2013 / 12:34