Implementando controle de acesso obrigatório com Selinux ou Apparmor no Linux

Implementando controle de acesso obrigatório com Selinux ou Apparmor no Linux

Para superar as limitações de e aumentar os mecanismos de segurança fornecidos pelo padrão ugo/rwx Listas de permissões e controle de acesso, o Agência de Segurança Nacional dos Estados Unidos (NSA) desenvolveu um flexível Controle de acesso obrigatório (Mac) Método conhecido como Selinux (abreviatura de Linux aprimorado de segurança) para restringir, entre outras coisas, a capacidade dos processos de acessar ou executar outras operações em objetos do sistema (como arquivos, diretórios, portas de rede etc.) à menor permissão possível, enquanto ainda permite modificações posteriores a este modelo.

Selinux
e Linux de Hardening de segurança do Appmoror

Outro Mac popular e amplamente usado é APARMOR, que além dos recursos fornecidos por Selinux, Inclui um modo de aprendizado que permite ao sistema “aprender”Como um aplicativo específico se comporta e para definir limites, configurando perfis para uso seguro de aplicação.

Em CENTOS 7, Selinux é incorporado ao próprio kernel e é ativado em Aplicação modo por padrão (mais sobre isso na próxima seção), em vez de OpenSuse e Ubuntu que usam APARMOR.

Neste artigo, explicaremos os itens essenciais de Selinux e Apparmor e como usar uma dessas ferramentas para seu benefício, dependendo da distribuição escolhida.

Introdução ao Selinux e como usá -lo no CentOS 7

O Linux aprimorado de segurança pode operar de duas maneiras diferentes:

  1. Aplicação: Selinux nega o acesso com base nas regras de política da Selinux, um conjunto de diretrizes que controlam o mecanismo de segurança.
  2. Permissivo: Selinux não nega acesso, mas as negações são registradas para ações que teriam sido negadas se a execução no modo de aplicação.

Selinux também pode ser desativado. Embora não seja um modo de operação, ainda é uma opção. No entanto, aprender a usar esta ferramenta é melhor do que apenas ignorá -la. Lembre -se!

Para exibir o modo atual de Selinux, usar getenforce. Se você deseja alternar o modo de operação, use setEnforce 0 (para configurá -lo como Permissivo) ou Setenforce 1 (Aplicação).

Já que essa mudança não sobreviverá a um reinício, você precisará editar o /etc/Selinux/Config Arquive e defina o Selinux variável para qualquer um aplicação, permissivo, ou desabilitado Para alcançar a persistência entre as reinicializações:

Como ativar e desativar o modo Selinux

Em uma nota lateral, se getenforce Retornos desativados, você terá que editar /etc/Selinux/Config com o modo de operação desejado e reiniciar. Caso contrário, você não poderá definir (ou alternar) o modo de operação com setEnforce.

Um dos usos típicos de setEnforce consiste em alternar entre os modos Selinux (de aplicação para permissivo ou o contrário) para solucionar um aplicativo que está se comportando ou não funcionando como esperado. Se funcionar depois de definir o Selinux como Permissivo Modo, você pode ter certeza de que está olhando para um problema de permissões do Selinux.

Dois casos clássicos em que provavelmente teremos que lidar com o Selinux:

  1. Alterando a porta padrão em que um daemon ouve.
  2. Definindo o Documentroot diretiva para um host virtual fora de /var/www/html.

Vamos dar uma olhada nesses dois casos usando os seguintes exemplos.

Exemplo 1: Alterando a porta padrão para o daemon sshd

Uma das primeiras coisas que a maioria dos administradores de sistemas faz para proteger seus servidores é alterar a porta em que o daemon SSH ouve, principalmente para desencorajar scanners de porta e atacantes externos. Para fazer isso, usamos a diretiva de porta em /etc/ssh/sshd_config seguido pelo novo número da porta, como segue (usaremos a porta 9999 nesse caso):

Porta 9999 

Depois de tentar reiniciar o serviço e verificar seu status, veremos que ele não conseguiu iniciar:

# Systemctl Reiniciar SSHD # Systemctl Status sshd 
Verifique o status do serviço SSH

Se dermos uma olhada em /var/log/auditoria/auditoria.registro, nós veremos isso sshd foi impedido de começar na porta 9999 por Selinux Porque essa é uma porta reservada para o JBoss Management Serviço (as mensagens de log do Selinux incluem a palavra "AVC" para que eles possam ser facilmente identificados de outras mensagens):

# gato/var/log/auditoria/auditoria.log | grep avc | cauda -1 
Verifique os logs de auditoria do Linux

Neste ponto, a maioria das pessoas provavelmente desativaria Selinux Mas não vamos. Veremos que há uma maneira de Selinux, e SSHD ouvindo em um porto diferente, viver em harmonia juntos. Certifique -se de ter o Policicoreutils-python pacote instalado e executado:

# yum instalar policycoreutils-python 

Para visualizar uma lista das portas onde o Selinux permite que o SSHD ouça. Na imagem a seguir, também podemos ver essa porta 9999 foi reservado para outro serviço e, portanto, não podemos usá -lo para executar outro serviço por enquanto:

# semanage porta -l | Grep SSH 

É claro que poderíamos escolher outra porta para o SSH, mas se tivermos certeza de que não precisaremos usar essa máquina específica para quaisquer serviços relacionados ao JBoss, podemos modificar a regra do Selinux existente e atribuir essa porta ao SSH: em vez disso:

# semanage porta -m -t ssh_port_t -p tcp 9999 

Depois disso, podemos usar o primeiro Semanage comando para verificar se a porta foi atribuída corretamente ou o -LC Opções (abreviação para a lista personalizada):

# semanage porta -lc # semanage porta -l | Grep SSH 
Atribuir porta ao SSH

Agora podemos reiniciar o ssh e conectar -se ao serviço usando porta 9999. Observe que essa alteração sobreviverá a uma reinicialização.

Exemplo 2: Escolha de um documentroot fora/var/www/html para um host virtual

Se você precisar configurar um host virtual do Apache usando um diretório que não seja /var/www/html como Documentroot (digamos, por exemplo, /websrv/sites/gabriel/public_html):

Documentroot “/websrv/sites/gabriel/public_html” 

Apache se recusará a servir o conteúdo porque o índice.html foi rotulado com o default_t Selinux Tipo, que o Apache não pode acessar:

# wget http: // localhost/índice.html # ls -lz/websrv/sites/gabriel/public_html/index.html 
Rotulado como default_t Selinux Type

Como no exemplo anterior, você pode usar o seguinte comando para verificar se esse é realmente um problema relacionado ao Selinux:

# gato/var/log/auditoria/auditoria.log | grep avc | cauda -1 
Verifique os logs para problemas de Selinux

Para mudar o rótulo de /websrv/sites/gabriel/public_html recursivamente para httpd_sys_content_t, fazer:

# semanage fContext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html (//.*)?" 

O comando acima concederá acesso somente leitura do Apache a esse diretório e seu conteúdo.

Finalmente, para aplicar a política (e fazer a alteração da etiqueta efetiva imediatamente), faça:

# RESTORECON -R -V/WITSRV/SITES/GABRIEL/PUBLICA_HTML 

Agora você deve poder acessar o diretório:

# wget http: // localhost/índice.html 
Acesse o diretório Apache

Para obter mais informações sobre o Selinux, consulte o Fedora 22 Selinux e o Guia do Administrador.

Páginas: 1 2