O que é o SELinux e como ele pode aumentar a segurança no Linux?
Quando se trata de proteger servidores Linux, a maioria dos administradores pensa no básico: manter os pacotes actualizados, configurar firewalls, limitar o acesso SSH. No entanto, um dos mecanismos de segurança mais poderosos é frequentemente ignorado – SELinux (Security-Enhanced Linux). Não se trata apenas de um complemento; é uma estrutura de segurança ao nível do kernel concebida para travar as intrusões antes de estas aumentarem. Tanto para VPS como para servidores dedicados, o SELinux pode significar a diferença entre um incidente menor e um comprometimento total do sistema.
O que é o SELinux?
SELinux é um módulo de segurança do kernel Linux que impõe o Controlo de Acesso Obrigatório (MAC).
- Sob o modelo tradicional DAC (Discretionary Access Control), o acesso é determinado pelos proprietários dos ficheiros, e o root tem poder irrestrito.
- Sob o MAC (SELinux), o acesso é governado por políticas de segurança de todo o sistema. Mesmo o root está sujeito a restrições.
Inicialmente desenvolvido pela NSA em colaboração com a Red Hat, o SELinux foi integrado no kernel Linux no início dos anos 2000 e agora é padrão em distribuições empresariais como RHEL, CentOS, Fedora, AlmaLinux e Rocky Linux.
O problema: onde a segurança tradicional do Linux falha
O modelo clássico de permissão do UNIX (DAC) tem fraquezas críticas:
- O root é todo-poderoso. Qualquer exploit que se transforme em root compromete todo o sistema.
- Comprometimento do serviço = comprometimento do sistema. Um módulo Apache ou um script PHP pirateado pode aceder a dados sensíveis.
- Os vectores de ataque modernos contornam o DAC. Web-shells, explorações de escalonamento de privilégios e fugas de contentores são comuns.
Cenário do mundo real:
Uma vulnerabilidade de upload de CMS permite que um atacante solte um web-shell. Sem o SELinux, o atacante pode ler config.php, extrair credenciais de banco de dados e comprometer toda a pilha. Com o SELinux, o processo do servidor web (httpd_t) é confinado e não pode aceder a ficheiros fora do seu domínio designado.
Como o SELinux funciona
Cada processo, arquivo, porta e socket tem um contexto de segurança (label).
Políticas definem quais contextos podem interagir.
Exemplo:
- O Apache roda no domínio httpd_t.
- Os arquivos do site são rotulados como httpd_sys_content_t.
- A política permite que o httpd_t leia apenas os ficheiros httpd_sys_content_t.
Se o Apache tentar ler /etc/shadow (shadow_t), o kernel nega o pedido e regista a violação.
Modos de operação
- Enforcing: as políticas são aplicadas, as violações são bloqueadas.
- Permissive: as violações são registadas mas não são bloqueadas (útil para testes).
- Desativado: O SELinux é desligado (não recomendado).
Melhor prática: comece em Permissive, revise os logs, ajuste as políticas, e então mude para Enforcing para produção.
Por que o SELinux é importante para hospedagem e DevOps
- Isolamento de processos: limita os danos quando um único serviço é comprometido.
- Aplicação do privilégio mínimo: mesmo o root não pode contornar as restrições da política.
- Forense e visibilidade: todas as acções negadas são registadas (/var/log/audit/audit.log).
- Segurança de contentores: impede que os contentores Docker/Podman saiam dos seus limites.
- Conformidade: necessária em ambientes regulamentados (PCI DSS, HIPAA, implantações de nível militar).
Tipos de política
- Direcionada (padrão): restringe apenas os serviços voltados para a rede (Apache, Nginx, Postfix, Dovecot).
- Estrita: aplica MAC a todos os processos.
- MLS/MCS: políticas avançadas para segurança de vários níveis ou de nível governamental.
Para a maioria das cargas de trabalho de servidores VPS e dedicados, a Política Direcionada é o melhor equilíbrio entre usabilidade e proteção.
Exemplos práticos
Verificar o status do SELinux
Restaurar contextos de arquivo após mover arquivos da web
Listar etiquetas de segurança de ficheiros
Permitir ligações de saída de serviços Web (por exemplo, chamadas API)
Rever as acções negadas nos registos
Conclusão
SELinux é mais do que uma caraterística de segurança adicional; é uma estrutura fundamental que redefine como o Linux impõe o controlo de acesso. Ao confinar processos, reduzir o impacto de vulnerabilidades e fornecer trilhas de auditoria detalhadas, o SELinux transforma um sistema Linux em um ambiente muito mais resiliente. Embora exija uma configuração e compreensão cuidadosas, os benefícios de segurança que traz para as infra-estruturas de servidor modernas tornam-no um componente essencial para qualquer implementação de produção.