...

SELinux vs. AppArmor – Comparação de conceitos de segurança para servidores Linux modernos

O SELinux AppArmor determina, em servidores Linux modernos, o nível de restrição com que os processos podem operar, mesmo quando lhes são concedidos direitos de root. Vou mostrar as diferenças práticas entre o controlo de acesso baseado em etiquetas e o baseado em percursos e avaliar a sua utilidade para contentores, Reforço da segurança do servidor e conformidade.

Pontos centrais

  • Princípio MAC: Ambos impõem restrições aos processos, para além dos direitos do Unix.
  • Modelo: O SELinux utiliza etiquetas, enquanto o AppArmor utiliza caminhos.
  • Contentor: O SELinux isola os contentores de forma mais precisa através do MCS.
  • Operação: O AppArmor é considerado mais fácil de utilizar.
  • Utilização: A escolha segue-se frequentemente à distribuição.

SELinux e AppArmor explicados de forma sucinta

Confio em Obrigatório Controlo de Acesso, quando protejo servidores Linux. O SELinux amplia o kernel com um modelo baseado em etiquetas, que atribui contextos de segurança a processos, ficheiros, sockets e portas. Uma política global define quais os tipos que podem interagir e quais os acessos que são estritamente bloqueados. O AppArmor segue um conceito baseado em perfis e percursos, que permite definir, por aplicação, quais os percursos, capacidades e interfaces que podem ser utilizados. Ambos complementam os direitos DAC clássicos, para que os processos comprometidos apenas possam Autorizados executar e não é possível mover-se lateralmente.

Modelo de segurança: etiquetas vs. percursos

Avalio primeiro o modelo de segurança, porque este influencia a facilidade de manutenção e minimiza os erros. O SELinux associa regras a etiquetas, que acompanham o ficheiro e, por isso, permanecem consistentes quando se realizam movimentos no sistema de ficheiros. O AppArmor associa regras a caminhos, o que é muito concreto, mas exige atualizações manuais em caso de renomeações. A abordagem baseada em rótulos parece centrada no sistema, enquanto a baseada em caminhos é mais centrada na aplicação e mais próxima do conjunto de ferramentas dos administradores. Ambas as abordagens controlam a mesma realidade, mas estruturam a Política são diferentes e exigem diferentes formas de trabalhar, que eu escolho consoante o grau de maturidade da equipa.

Aspeto SELinux AppArmor
Modelo de controlo Baseado em rótulo/tipo (Type Enforcement) Baseado no caminho/perfil, consoante a aplicação
Âmbito da política Conjunto de regras global e aplicável a todo o sistema Perfis relacionados com processos e aplicações
Mover ficheiro A etiqueta mantém-se O caminho poderá ter de ser ajustado, se necessário
MLS/MCS Disponível (separação fina) Não disponível
Isolamento de contentores Isolamento entre o anfitrião e os contentores Proteção primária do anfitrião
Acesso Curva de aprendizagem mais acentuada Mais rápido de aplicar

Complexidade e facilidade de utilização

Estou a planear a implementação tendo em conta as capacidades da equipa e a tolerância a erros da operação. O SELinux oferece um nível de detalhe enorme, mas exige, em contrapartida, uma boa compreensão de tipos, funções e domínios, bem como ferramentas de diagnóstico sólidas. A visão global aumenta a consistência, mas as regras incorretas podem afetar muitos serviços e têm de ser resolvidas de forma estruturada. O AppArmor proporciona-me um início suave, uma vez que crio perfis por serviço e atribuo as violações especificamente a esse serviço. Esta transparência reduz a frustração e permite-me efetuar alterações rapidamente e com Visão geral colocar em produção.

Modelo de ameaças e cenários típicos

Tomo as minhas decisões com base nos riscos concretos que abordo. Ambos os mecanismos MAC reduzem de forma sustentável:

  • Danos indiretos decorrentes do RCE: Um processo Web sequestrado não lê automaticamente quaisquer chaves ou configurações.
  • Escalada de privilégios: Mesmo com direitos de root, as políticas impedem o acesso não autorizado a recursos sensíveis.
  • Movimento lateral: Os processos não têm acesso a conjuntos de dados, sockets ou dispositivos adjacentes.
  • Exfiltração: Os caminhos de ficheiros e de rede não autorizados são bloqueados ou registados numa fase inicial.
  • Riscos da cadeia de abastecimento: Os ficheiros binários externos ou atualizados permanecem na área restrita dos direitos definidos.

Defino estes riscos antecipadamente, pois são eles que determinam o nível de detalhe dos perfis, a profundidade do registo e a minha Aceitação de falsos alarmes iniciais.

Artefactos de política, valores booleanos e perfis

No SELinux, utilizo a configuração padrão Aplicação de tipos com módulos que implemento em pacotes e com versões definidas. Os booleanos permitem-me ativar ou desativar funcionalidades de forma segura (por exemplo, se um servidor HTTP pode iniciar ligações de rede), sem ter de bifurcar o módulo. A escolha entre direcionado e MLS/MCS- As políticas são definidas de acordo com os requisitos de conformidade e dos clientes. No AppArmor, trabalho com perfis claros e orientados para os processos, que controlam com precisão os caminhos dos ficheiros, as capacidades e os acessos à rede e ao DBus. Para caminhos dinâmicos, utilizo caracteres curinga ou diretórios abstratos e mantenho os perfis modulares, para que as atualizações sustentável permanecer.

Funcionalidades: MLS/MCS e contentores

No que diz respeito a cargas de trabalho modernas, presto atenção à separação de clientes e ao isolamento de contentores. O SELinux inclui MLS e MCS, ou seja, níveis e categorias que organizam rigorosamente os fluxos de informação e separam automaticamente os contentores com etiquetas únicas. Desta forma, limito o alcance de contentores comprometidos e mantenho os dados bem separados uns dos outros. O AppArmor protege sobretudo o anfitrião contra os contentores; a separação clara entre os próprios contentores requer precauções adicionais. Por isso, para requisitos de conformidade rigorosos, recorro ao SELinux e utilizo o MCS para Clientes isolar de forma fiável.

Distribuições e aplicações típicas

Costumo basear a minha decisão na distribuição, porque é aí que o ecossistema e as ferramentas funcionam melhor em conjunto. Nos ambientes RHEL, CentOS e Fedora, o SELinux vem frequentemente ativado de fábrica e constitui uma linha de segurança fundamental na conceção do sistema. O Ubuntu, o Debian e o SUSE fornecem perfis do AppArmor para serviços comuns, o que me permite ativar rapidamente a proteção de forma produtiva. Se precisar de mais segurança a nível do núcleo, associo a seleção de MAC a Reforço do kernel, para reduzir ainda mais as vulnerabilidades. Desta forma, consigo criar uma combinação harmoniosa entre distribuição, mecanismo MAC e Endurecimento sem interrupções no dia-a-dia.

Integração de contentores e do orquestrador

Integro sistematicamente o MAC em ambientes de execução, para que as garantias de segurança se apliquem também em contextos de orquestração. Os ambientes de execução de contentores respeitam os perfis do AppArmor e as etiquetas do SELinux; através de security-opts Atribuo perfis/etiquetas de forma específica a cada contentor. No Kubernetes, gerencio perfis e contextos como parte dos manifestos ou através de anotações/configurações adequadas, para que as implementações se mantenham reprodutíveis e verificáveis. Importante: os volumes e os HostMounts têm de estar corretamente rotulados ou incluídos nos perfis; caso contrário, os contentores falham ao iniciar. A minha regra é: Implementação e Política devem ser versionados, testados e implementados em conjunto, para que a escalabilidade e as reversões sejam seguras.

Gestão de diretrizes no dia a dia

Trabalho passo a passo, porque as alterações feitas gradualmente permanecem controláveis. No SELinux, utilizo o modo permissivo e recorro a ferramentas como o audit2allow para deduzir, de forma específica, as autorizações legítimas a partir dos registos. Em seguida, transfiro as regras autorizadas para um sistema de versões e implemento-as de forma reproduzível. No AppArmor, começo frequentemente no modo «complain» até que um perfil abranja a utilização real e, depois, mudo para o modo «enforce». Esta abordagem poupa o Disponibilidade dos serviços e evita surpresas durante os períodos de manutenção.

Obstáculos e antipadrões frequentes

  • Desativação automática: Não resolvo problemas de políticas desativando o MAC; procuro a causa no registo e faço ajustes específicos.
  • Contextos de ficheiros incorretos: No SELinux, as etiquetas mantêm-se quando se movem os ficheiros, mas não em caso de processos de restauração incorretos. Utilizo implementações limpas e reclassificar-rotinas.
  • Caracteres curinga demasiado amplos: No AppArmor, os placeholders demasiado amplos comprometem a proteção. Começo com uma definição restrita e só a alargo na medida do que a telemetria comprovar.
  • Deriva: As alterações manuais de emergência sem reversão no Git conduzem a inconsistências. Considero que as políticas declarativo e automatizado.
  • Combinação de LSMs: Não combino o SELinux com o AppArmor no mesmo anfitrião; na prática, utilizo um mecanismo MAC principal, juntamente com LSMs complementares, como o Yama/Lockdown, desde que sejam suportados.
  • Caminhos temporários: Tenho de planear com antecedência o /tmp, os sockets de tempo de execução e os diretórios dinâmicos; caso contrário, as atualizações ou as implementações «blue-green» falharão.

Desempenho e tolerância a falhas

Primeiro, verifico se o MAC está a limitar o meu débito ou a atrasar o arranque de serviços críticos. Na prática, quando a configuração está correta, quase não noto perdas mensuráveis, porque as verificações do kernel funcionam de forma eficiente. Mais importante ainda é o facto de regras demasiado rígidas poderem bloquear o arranque ou o funcionamento de serviços específicos até que eu as reajuste. Por isso, um registo de eventos rigoroso, uma gestão de alterações clara e uma implementação ponderada são pontos obrigatórios na agenda. É assim que mantenho um elevado nível de proteção e a Riscos de pequena dimensão em termos operacionais, sem tornar a plataforma mais lenta.

Reforço da segurança dos servidores em rede

Combino o MAC com filtros de rede, reforço de segurança do SSH e limites de processos, para que as falhas não se agravem. Os namespaces e os cgroups organizam as cargas de trabalho e limitam os recursos, enquanto o MAC proíbe tudo o que não esteja expressamente permitido. Para uma separação mais clara entre clientes em contentores, recorro ao MCS no SELinux e complemento as regras do anfitrião conforme necessário. Como orientação, utilizo Espaços de nomes e cgroups, para construir as camadas de forma consistente. Esta estrutura em camadas mantém os atacantes em espaços estreitos Barreiras de proteção, mesmo que alguns anéis de proteção deixem de funcionar.

Conformidade e auditoria

Associo o MAC a estratégias de auditoria para cumprir os requisitos de forma mensurável. O SELinux e o AppArmor fornecem eventos precisos, que recolho de forma centralizada e correlaciono com informações sobre alterações. Para auditorias internas e externas, documento:

  • Cobertura da apólice: Que serviços estão no modo «Enforce» e quais são as exceções?
  • Histórico de alterações: Quem alterou que regra, quando e com que revisão?
  • Caminhos de alarme: Quais são os eventos da MAC que estão na moda, quem reage, como é a Tempo médio de mitigação?
  • Separação de clientes: Que categorias MCS (SELinux) estão atribuídas e como são geridas?

É assim que comprovo a implementação de medidas técnicas em relação aos quadros de conformidade e guardo os comprovativos testável antes.

Guia de decisão: Qual é a escolha mais adequada?

Começo por definir os objetivos de conformidade, os conhecimentos da equipa e os riscos operacionais antes de definir o rumo a seguir. Se o ambiente necessitar de MLS/MCS, isolamento preciso em contentores e políticas de sistema consistentes, há muitos argumentos a favor do SELinux. Se o que procuro for uma implementação rápida, perfis transparentes e uma atribuição clara por serviço, o AppArmor revela os seus pontos fortes. Para ambientes híbridos, utilizo o sistema nativo da distribuição e complemento-o cuidadosamente com regras próprias. No que diz respeito ao isolamento de aplicações, vale a pena considerar, como complemento, Isolamento do processo, para restringir ainda mais os privilégios resumir.

Cenários na prática: orientação rápida

  • Máquinas virtuais de inquilino único: O AppArmor é, muitas vezes, suficiente, implementação rápida, perfis claros para cada serviço.
  • Servidor multi-tenant com contentores: SELinux com MCS para uma separação rigorosa entre contentores e dados.
  • Monólito antigo: O AppArmor como ponte, com transição posterior para o SELinux, à medida que a equipa ganha experiência.
  • Ambiente altamente regulado: SELinux com política rigorosa, valores booleanos mínimos, auditoria configurada para „bloquear primeiro, depois permitir“.
  • Edge/Embedded: Perfis AppArmor simplificados, sobrecarga mínima, controlo rigoroso dos percursos dos poucos serviços.

Mini-caso prático: Implementar uma pilha web de forma segura

Estou a implementar o NGINX, o PHP-FPM e um agendador numa plataforma de alojamento. Primeiro, ativo o MAC no reclamar/permissivo-modo e deixo o Traffic a funcionar em tempo real. Depois:

  • Análise do evento: Filtro os registos de auditoria relativos a estes serviços, elimino os acessos indevidos evidentes e interpreto os eventos restantes.
  • Criação de regras: Para o SELinux, genero permissões específicas e incluo-as num módulo; para o AppArmor, aperfeiçoo os perfis para incluir os caminhos da cache, dos uploads e dos ficheiros temporários.
  • Revalidação: Os testes de carga verificam o arranque, as atualizações contínuas e os percursos de erro (por exemplo, rotação de registos, renovação de certificados).
  • Transição para o Enforce: Estou a ativar o Enforce gradualmente (Canary) e a monitorizar métricas e anomalias nos registos.
  • Funcionamento: As políticas são integradas no CI/CD, e as alterações passam por revisões e testes de pré-produção. Eu defino um Quebrar o vidro- Procedimento para situações de emergência reais, com acompanhamento rigoroso.

Melhores práticas retiradas da experiência prática

Nunca inicio a execução de políticas MAC às cegas, mas observo primeiro. Os registos mostram a utilização real; a partir daí, defino autorizações mínimas e documento os ajustes de forma exaustiva. Integro políticas e perfis no CI/CD para garantir que as alterações sejam implementadas de forma verificável e repetível. A monitorização correlaciona os eventos do MAC com outros sinais e torna visíveis os valores atípicos. Este ciclo de observação, ajuste e verificação mantém a qualidade é elevado e colmata as lacunas gradualmente.

Resumo e contextualização

Utilizo o SELinux quando necessito de uma separação em níveis finos, do MCS para contentores e de uma política de sistema uniforme. Opto pelo AppArmor quando a prioridade é uma implementação rápida, perfis fáceis de compreender e uma análise clara de erros. Ambos os sistemas reforçam significativamente a segurança dos servidores Linux, indo muito além dos direitos de ficheiro clássicos, e limitam o alcance de ataques bem-sucedidos. O que continua a ser decisivo é a manutenção consistente das regras, a sua integração em firewalls, mecanismos de isolamento e registo de eventos. Desta forma, consigo um elevado ganho de segurança com um esforço razoável e, ao mesmo tempo, mantenho o funcionamento controlável.

Artigos actuais