RHCSA Series de controle obrigatório de controle de acesso Essentials com Selinux em Rhel 7 - Parte 13

RHCSA Series de controle obrigatório de controle de acesso Essentials com Selinux em Rhel 7 - Parte 13

Durante esta série, exploramos em detalhes pelo menos dois métodos de controle de acesso: padrão ugo/rwx Permissões (Gerenciar usuários e grupos - Parte 3) e listas de controle de acesso (Configure os sistemas de arquivos ACLs - Parte 7).

Exam

Embora necessários como permissões de primeiro nível e mecanismos de controle de acesso, eles têm algumas limitações que são abordadas por Linux aprimorado de segurança (também conhecido como Selinux abreviado).

Uma dessas limitações é que um usuário pode expor um arquivo ou diretório a uma violação de segurança através de um pouco de elaborado chmod comando e, portanto, causar uma propagação inesperada dos direitos de acesso. Como resultado, qualquer processo iniciado por esse usuário pode fazer o que quiser com os arquivos de propriedade do usuário, onde finalmente um software malicioso ou comprometido pode obter acesso no nível da raiz a todo o sistema.

Com essas limitações em mente, o Agência de Segurança Nacional dos Estados Unidos (NSA) primeiro criado Selinux, Um método flexível de controle de acesso obrigatório, para restringir a capacidade dos processos de acessar ou executar outras operações em objetos do sistema (como arquivos, diretórios, portas de rede etc.) para o modelo de menor permissão, que pode ser modificado posteriormente conforme necessário. Em poucas palavras, cada elemento do sistema recebe apenas o acesso necessário para funcionar.

Em RHEL 7, Selinux é incorporado ao próprio kernel e é ativado em Aplicação modo por padrão. Neste artigo, explicaremos brevemente os conceitos básicos associados a Selinux e sua operação.

Modos Selinux

O Selinux pode operar de três 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.
  3. Desabilitado (auto-explicativo).

O getenforce O comando exibe o modo atual de Selinux, enquanto setEnforce (seguido por um 1 ou a 0) é usado para alterar o modo para Aplicação ou Permissivo, respectivamente, apenas durante a sessão atual.

Para alcançar a persistência entre logouts e reinicializações, você precisará editar o /etc/Selinux/Config Arquive e defina a variável Selinux como aplicação, permissivo, ou desabilitado:

# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat/etc/selinux/config 
Defina o modo Selinux

Normalmente você vai usar setEnforce Para alternar entre os modos Selinux (aplicando para permissivo e para trás) como uma primeira etapa de solução de problemas. Se Selinux estiver definido atualmente aplicação Enquanto você está enfrentando um certo problema, e o mesmo desaparece quando você o define como permissivo, Você pode estar confiante de que está olhando para um problema de permissões do Selinux.

Contextos Selinux

Um contexto de Selinux consiste em um ambiente de controle de acesso em que as decisões são tomadas com base no usuário, função e tipo do Selinux (e opcionalmente um nível):

  1. Um usuário do Selinux complementa uma conta de usuário do Linux regular mapeando -a para uma conta de usuário do Selinux, que por sua vez é usada no contexto do Selinux para processos nessa sessão, a fim de definir explicitamente suas funções e níveis permitidos.
  2. O conceito de função atua como um intermediário entre domínios e usuários do Selinux, pois define quais domínios de processo e tipos de arquivos podem ser acessados. Isso protegerá seu sistema contra a vulnerabilidade a ataques de escalação de privilégios.
  3. Um tipo define um tipo de arquivo Selinux ou um domínio do processo Selinux. Em circunstâncias normais, os processos são impedidos de acessar arquivos que outros processos usam e e de acessar outros processos, portanto, o acesso só é permitido se existir uma regra de política de Selinux específica que o permita.

Vamos ver como tudo isso funciona nos seguintes exemplos.

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

Ao garantir SSH - Parte 8, explicamos que alterar a porta padrão onde sshd O Solte On é uma das primeiras medidas de segurança para proteger seu servidor contra ataques externos. Vamos editar o /etc/ssh/sshd_config Arquive e defina a porta para 9999:

Porta 9999 

Salve as alterações e reinicie o SSHD:

# Systemctl Reiniciar SSHD # Systemctl Status sshd 
Reinicie o serviço SSH

Como você pode ver, o SSHD não conseguiu começar. Mas o que houve?

Uma rápida inspeção de /var/log/auditoria/auditoria.registro indica que o SSHD foi negado as permissões para começar na porta 9999 (As mensagens de log do Selinux incluem a palavra “AVC”Para que eles possam ser facilmente identificados de outras mensagens) porque essa é uma porta reservada para o JBoss Management serviço:

# gato/var/log/auditoria/auditoria.log | grep avc | cauda -1 
Inspecione os logs SSH

Neste ponto, você pode desativar Selinux (mas não!) como explicado anteriormente e tente começar sshd novamente, e deve funcionar. No entanto, o Semanage O utilitário pode nos dizer o que precisamos mudar para que possamos iniciar o SSHD em qualquer porta que escolhemos sem problemas.

Correr,

# semanage porta -l | Grep SSH 

Para obter uma lista das portas onde o Selinux permite que o SSHD ouça.

Ferramenta semanage

Então, vamos mudar a porta /etc/ssh/sshd_config para porta 9998, Adicione a porta ao contexto ssh_port_t, e reinicie o serviço:

# semanage porta -a -t ssh_port_t -p tcp 9998 # systemctl reiniciar sshd # systemctl is -attive sshd 
Semanage Adicionar porta

Como você pode ver, o serviço foi iniciado com sucesso desta vez. Este exemplo ilustra o fato de que o Selinux controla o número da porta TCP em suas próprias definições internas do tipo de porta.

Exemplo 2: Permitir que o HTTPD envie o Access Sendmail

Este é um exemplo de Selinux gerenciando um processo acessando outro processo. Se você implementar mod_security e mod_evasive junto com o Apache em seu servidor RHEL 7, você precisa permitir httpd acessar enviar correio para enviar uma notificação de correio após (D) DOS ataque. No comando seguinte, omite o -P bandeira se você não quiser que a mudança seja persistente nas reinicializações.

# semanage boolean -1 | grep httpd_can_sendmail # setsebool -p httpd_can_sendmail 1 # semanage boolean -1 | Grep httpd_can_sendmail 
Permitir que o Apache envie e -mails

Como você pode dizer no exemplo acima, Selinux Boolean Configurações (ou apenas booleanos) são verdadeiras / falsas regras incorporadas às políticas de Selinux. Você pode listar todos os booleanos com Semanage boolean -l, e, alternativamente.

Exemplo 3: Servindo um site estático de um diretório que não seja o padrão

Suponha que você esteja servindo um site estático usando um diretório diferente do que o padrão (/var/www/html), dizer /sites (Este pode ser o caso se você estiver armazenando seus arquivos da web em uma unidade de rede compartilhada, por exemplo, e precisar montá -lo em /sites).

a). Criar um índice.html arquivo dentro /sites com o seguinte conteúdo:

 

Teste de Selinux

Se você fizer,

# ls -lz /sites /índice.html 

você verá que o índice.html o arquivo foi rotulado com o default_t Selinux Tipo, que o Apache não pode acessar:

Verifique a permissão do arquivo Selinux

b). Mudar o Documentroot diretiva em /etc/httpd/conf/httpd.conf para /sites e não se esqueça de atualizar o bloco de diretório correspondente. Então, reinicie o apache.

c). Navegue para http: //, E você deve obter uma resposta HTTP 503 proibida.

d). Em seguida, mude o rótulo de /sites, recursivamente, para o httpd_sys_content_t Digite para conceder acesso somente leitura do Apache a esse diretório e seu conteúdo:

# semanage fcontext -a -t httpd_sys_content_t "/sites (/.*)?" 

e). Finalmente, aplique a política de Selinux criada em d):

# RESTORECON -R -V /Sites 

Agora reinicie o Apache e navegue para http: // Novamente e você verá o arquivo html exibido corretamente:

Verifique a página Apache

Resumo

Neste artigo, passamos pelo básico de Selinux. Observe que, devido à vastidão do assunto, uma explicação completa detalhada não é possível em um único artigo, mas acreditamos que os princípios descritos neste guia ajudarão você a passar para tópicos mais avançados, caso deseje fazê -lo.

Se eu puder, deixe -me recomendar dois recursos essenciais para começar: a página da NSA Selinux e o RHEL 7 Selinux User e Administrator's Guide.

Não hesite em nos informar se você tiver alguma dúvida ou comentário.