SELinux

O que é o SELinux e como ele melhora a segurança no Linux

Ilustração do mascote Tux do Linux com um símbolo de segurança, destacando a proteção oferecida pelo SELinux, com elementos gráficos representando segurança cibernética.

Ilustração do mascote Tux do Linux com um símbolo de segurança, destacando a proteção oferecida pelo SELinux, com elementos gráficos representando segurança cibernética.

SELinux (Security-Enhanced Linux) é um módulo de segurança implementado no kernel do Linux que fornece mecanismos avançados de controle de acesso. Ele foi inicialmente desenvolvido pela NSA (Agência de Segurança Nacional dos Estados Unidos) e tem como objetivo reforçar as políticas de segurança em sistemas Linux.

O SELinux aplica um modelo de segurança baseado em políticas, que controla o que processos e usuários podem fazer no sistema, além das permissões tradicionais do Linux, como controle de acesso discricionário (DAC).

Como o SELinux melhora a segurança no Linux?

  1. Controle de acesso rígido (MAC): O SELinux implementa o conceito de Mandatory Access Control (MAC), que restringe o acesso de processos e usuários aos recursos do sistema de forma mais detalhada. Ao contrário do controle tradicional (DAC), onde o proprietário de um arquivo define as permissões, o MAC impõe restrições adicionais com base em políticas definidas por administradores de segurança.
  2. Isolamento de processos: O SELinux pode garantir que, mesmo que um processo seja comprometido (por exemplo, devido a uma vulnerabilidade de segurança), ele não consiga acessar recursos críticos do sistema ou comprometer outros processos. Isso ajuda a limitar os danos em caso de invasão.
  3. Políticas de segurança flexíveis: SELinux permite a criação de políticas de segurança específicas para cada ambiente ou aplicação. Com isso, o administrador pode definir como os programas interagem entre si, acessam arquivos ou se comunicam com a rede.
  4. Proteção contra exploits: Um dos pontos fortes do SELinux é mitigar os danos causados por vulnerabilidades exploráveis, como buffer overflows. Ele age limitando as operações que processos vulneráveis podem realizar, tornando mais difícil para um invasor ganhar controle total do sistema.
  5. Confidencialidade e integridade de dados: O SELinux pode ser configurado para aplicar políticas de integridade e confidencialidade de dados, garantindo que informações críticas não sejam modificadas ou acessadas sem as permissões adequadas.
  6. Logs detalhados: O SELinux também fornece um registro detalhado de todas as tentativas de violação de segurança, o que facilita a identificação e correção de potenciais falhas de segurança.

Caso de uso: Hospedagem Web com SELinux

Imagine um servidor web que está exposto à Internet. Em um ambiente sem SELinux, se o servidor web for comprometido, o invasor pode ter acesso total ao sistema de arquivos, podendo modificar ou ler qualquer arquivo que o servidor tenha permissão. Com SELinux ativado e bem configurado, mesmo que o servidor web seja explorado, o atacante estaria restrito a um ambiente controlado e com acesso limitado, impedindo a escalada de privilégios e minimizando o impacto da invasão.

SELinux é, portanto, uma camada extra essencial para a segurança em sistemas Linux, proporcionando controle e proteção adicionais para ambientes que exigem um alto nível de segurança.

Como configurar e gerenciar SELinux

Embora o SELinux ofereça uma poderosa proteção, sua implementação requer uma configuração adequada para garantir que ele funcione sem causar problemas operacionais. Abaixo estão alguns passos importantes para configurar e gerenciar o SELinux no Linux.

1. Verificar o status do SELinux

Antes de ativar ou modificar o SELinux, é importante verificar se ele está ativo no sistema. Para isso, use o comando:

sestatus

Este comando retornará o status atual do SELinux (enforcing, permissive ou disabled).

  • Enforcing: O SELinux está ativo e aplicando as políticas de segurança.
  • Permissive: O SELinux está ativo, mas apenas loga violações de políticas sem impor restrições.
  • Disabled: O SELinux está desativado.

2. Ativando o SELinux

Para ativar o SELinux, é necessário editar o arquivo de configuração principal em /etc/selinux/config. Abra o arquivo com um editor de texto:

sudo nano /etc/selinux/config

Em seguida, altere a linha SELINUX= para um dos seguintes valores:

  • enforcing: Ativa o SELinux e aplica as políticas.
  • permissive: Ativa o SELinux, mas não aplica as políticas (ideal para testes).
  • disabled: Desativa o SELinux.

Exemplo:

SELINUX=enforcing

Após editar o arquivo, reinicie o sistema para aplicar as alterações.

3. Gerenciando políticas do SELinux

As políticas de segurança no SELinux determinam o que cada processo ou usuário pode fazer no sistema. Existem dois tipos principais de políticas:

  • Targeted: A política padrão do SELinux, que protege apenas serviços específicos, como o Apache e o SSH.
  • Strict: Uma política mais rígida, que aplica controles de segurança a todos os processos do sistema.

Para alterar ou ajustar políticas, é possível usar ferramentas como semodule, que permite carregar e remover módulos de políticas. Por exemplo, para listar os módulos de políticas atuais:

semodule -l

4. Alterando contextos de arquivos

Um dos recursos mais importantes do SELinux é a capacidade de definir contextos de segurança para arquivos e diretórios. Isso define como um processo pode interagir com eles. Use o comando ls -Z para verificar o contexto de um arquivo:

ls -Z /var/www/html

Se precisar alterar o contexto de um arquivo ou diretório, você pode usar o comando chcon:

sudo chcon -R -t httpd_sys_content_t /var/www/html

Aqui, o contexto httpd_sys_content_t é aplicado ao diretório do Apache.

5. Solucionando problemas com o SELinux

Como o SELinux pode restringir operações que anteriormente eram permitidas, é comum que, após sua ativação, alguns serviços não funcionem como esperado. Quando isso ocorre, o SELinux registra as tentativas de violação no arquivo de log /var/log/audit/audit.log.

Para facilitar a leitura dos logs e ajudar a solucionar problemas, é possível usar a ferramenta audit2why, que converte mensagens de log do SELinux em descrições mais compreensíveis:

sudo cat /var/log/audit/audit.log | audit2why

Com essa informação, você pode ajustar as políticas de segurança ou modificar os contextos de arquivo, se necessário.

6. Configurando SELinux em modo permissivo para testes

Durante a fase de configuração ou teste de novos serviços, é recomendável colocar o SELinux em modo permissivo. Isso permite verificar quais violações de políticas ocorreriam sem que elas sejam aplicadas, registrando-as no log. Para alterar temporariamente o SELinux para o modo permissivo:

sudo setenforce 0

E para retornar ao modo de aplicação (enforcing):

sudo setenforce 1

Conclusão

O SELinux é uma ferramenta poderosa que oferece controle detalhado sobre o que processos e usuários podem fazer em um sistema Linux. Ao implementar SELinux, você adiciona uma camada extra de segurança que ajuda a mitigar ataques e explorações, protegendo os sistemas contra danos maiores.

No entanto, configurar o SELinux requer um conhecimento sólido de suas políticas e contexto de segurança, além de monitorar e ajustar regularmente suas regras, especialmente ao implementar novos serviços ou aplicações. Com uma configuração adequada, o SELinux é uma defesa crucial em servidores críticos e ambientes onde a segurança é uma prioridade.

Se você tiver dúvidas ou quiser compartilhar sua experiência com o SELinux, participe do nosso Grupo SempreUpdate e contribua para a discussão!