Capítulo 3. Criando perfis do Novell AppArmor

Sumário

3.1. Componentes e sintaxe dos perfis
3.2. Criando e gerenciando perfis do Novell AppArmor
3.3. Criando perfis do Novell AppArmor com a GUI do YaST
3.4. Criando perfis do Novell AppArmor usando a interface da linha de comando
3.5. Dois métodos de criação de perfis
3.6. Nomes de caminhos e englobamento
3.7. Modos de acesso a permissões de arquivo

Este capítulo explica como criar e gerenciar perfis do Novell® AppArmor. Você poderá criar perfis do Novell AppArmor após selecionar os programas desejados. Para obter ajuda a esse respeito, consulte o Capítulo 2, Selecionando programas a imunizar (↑Guia de Administração do Novell AppArmor 2.0).


3.1. Componentes e sintaxe dos perfis

Esta seção mostra detalhes da sintaxe ou composição dos perfis do Novell AppArmor. Há um exemplo dessa sintaxe na Seção 3.1.1, “Decompondo um perfil do Novell AppArmor” (↑Guia de Administração do Novell AppArmor 2.0).

3.1.1. Decompondo um perfil do Novell AppArmor

Os componentes de perfil do Novell AppArmor são chamados de regras do Novell AppArmor. Atualmente há dois tipos principais de regras do Novell AppArmor: entradas de caminho e entradas de capacidade. As entradas de caminho especificam o que o processo pode acessar no sistema de arquivos, e as entradas de capacidade propiciam um controle mais minucioso daquilo que um processo delimitado pode fazer, através de outras chamadas de sistema que exigem privilégios. As inclusões são um tipo de meta-regra ou diretiva que extrai entradas de caminho e capacidade de outros arquivos.

A maneira mais fácil de explicar em que consiste um perfil e como criá-lo é mostrar os detalhes de uma amostra de perfil. Considere, por exemplo, o seguinte perfil do programa /sbin/klogd:

# profile to confine klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

Comentário que nomeia o programa delimitado por esse perfil. Esse tipo de comentário deve ser sempre precedido pelo sinal #.

2

Caminho absoluto para o programa delimitado.

3

As chaves {} funcionam como um container de declarações de inclusão de outros perfis, além de entradas de caminho e capacidade.

4

Esta diretiva extrai componentes de perfis do Novell AppArmor para simplificar os perfis.

5

As declarações das entradas de capacidade habilitam cada uma das 29 capacidades de rascunho do POSIX.1e.

6

Entrada de caminho que especifica quais áreas do sistema de arquivos o programa pode acessar. A primeira parte da entrada de caminho especifica o caminho absoluto para um arquivo (inclusive englobamento e expressões regulares), e a segunda parte indica os modos de acesso permitidos (r para leitura, w para gravação ex para execução). Um espaço em branco qualquer (espaço ou tabulação) pode tanto preceder os nomes de caminho quanto separar os nomes de caminho dos modos de acesso. O espaço em branco entre o modo de acesso e a vírgula do final é opcional.

Quando se cria um perfil para um programa, este só pode acessar os arquivos, modos e capacidades do POSIX especificados no perfil. Essas restrições se acrescem aos controles de acesso nativos do Linux.

Exemplo: .  Para obter a capacidade CAP_CHOWN, o programa deve ter não só acesso a CAP_CHOWN sob os controles de acesso convencionais do Linux (isso significa, em geral, que deve ser um processo de Root), mas também a capacidade chown (mudar usuário) em seu perfil. Da mesma forma, para gravar no arquivo /foo/bar, o programa deve ter tanto os bits de modo e o ID de usuário correto definidos nos atributos de arquivos (consulte as páginas de manuais chmod e chown) quanto /foo/bar w em seu perfil.

As tentativas de violação das regras do Novell AppArmor são registradas no syslog. Em muitos casos, as regras do Novell AppArmor impedem que os ataques funcionem porque os arquivos necessários não podem ser acessados e, em todos os casos, a delimitação pelo Novell AppArmor limita os danos que o invasor pode causar ao conjunto de arquivos permitidos pelo Novell AppArmor.

3.1.2. #include

As declarações #include (de inclusão) são diretivas que extraem componentes de outros perfis do Novell AppArmor para simplificar perfis. Os arquivos de inclusão obtêm permissões de acesso para programas. Com uma inclusão, você pode fornecer ao programa acesso a arquivos ou caminhos de diretórios que são necessários também a outros programas. Além disso, pode reduzir o tamanho do perfil.

Por padrão, a declaração #include (de inclusão) anexa /etc/apparmor.d/ (onde ela espera encontrar o arquivo incluído) ao início do caminho. Ao contrário de outras declarações de perfil (mas como nos programas C), as linhas de #include (inclusão) não terminam com vírgula.

Para facilitar a criação de perfis de aplicativos, o Novell AppArmor dispõe de duas classes de #include (inclusões): abstrações e pacotes de programa.

3.1.2.1. Abstrações

As abstrações são #includes (inclusões) agrupadas por tarefas de aplicativos comuns. Entre essas tarefas estão o acesso a mecanismos de autenticação e rotinas de serviços de nomes, requisitos comuns de imagem e a contabilização do sistema. Os arquivos relacionados nessas abstrações são específicos à tarefa nomeada; os programas que necessitam de um desses arquivos geralmente exigem algum dos demais arquivos relacionados no arquivo de abstração (dependendo não da configuração local, mas também das exigências específicas do programa). As abstrações encontram-se em /etc/apparmor.d/abstractions/.

3.1.2.2. Pacotes de programas

Os pacotes de programas são controles de acesso a programas específicos, controlados pelo administrador do sistema com base em políticas locais. Cada pacote só é usado por um programa. Os pacotes destinam-se a facilitar as modificações locais e atualizações às políticas fornecidas pelo Novell AppArmor. Os administradores podem modificar a política desses arquivos conforme suas necessidades e deixar os perfis de programa inalterados, simplificando a tarefa de fundir as atualizações de política do Novell AppArmor em políticas de uso obrigatório em cada local.

As restrições de acesso dos pacotes de programas geralmente são bastante permissivas. Elas se destinam a permitir aos usuários acesso aos arquivos com o mínimo de interferência possível, mas garantindo a proteção dos recursos do sistema. Uma exceção a essa regra é a série postfix* de pacotes de programas. Esses perfis são usados para facilitar a abstração da localização dos binários postfix. Evite reduzir as permissões da série postfix*. Os pacotes de programas encontram-se em /etc/apparmor.d/program-chunks/.

3.1.3. Entradas de capacidade (POSIX.1e)

As declarações de capacidade consistem simplesmente na palavra “capacidade” seguida do nome da capacidade do POSIX.1e definida na página de manual capabilities(7).