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

Sala de servidores moderna com infraestrutura de alojamento e fluxos de dados abstratos como símbolo das notificações do Keyspace do Redis
Bases de dados

Utilizar de forma eficiente as notificações do Redis Keyspace no alojamento

Descubra como utilizar as notificações do Redis Keyspace no serviço de alojamento para a invalidação inteligente da cache, a monitorização eficiente da cache e arquiteturas orientadas por eventos. Foco na configuração dos eventos do Redis e nas melhores práticas.