Administrando o SELinux no Oracle Linux

Descreve o SELinux e fornece orientação sobre como administrar o SELinux no Oracle Linux.

A segurança tradicional do Linux é baseada em uma política de Controle de Acesso Discricionário (DAC). No modelo DAC de segurança do sistema, o acesso a recursos como arquivos e processos é baseado exclusivamente na identidade e propriedade do usuário. Se houver malware ou software danificado no sistema, ele poderá fazer qualquer coisa com arquivos e recursos que o usuário que iniciou o processo tenha permissão para fazer. Se o usuário for root ou o aplicativo estiver em execução com privilégios elevados (setuid ou setgid para root), o processo terá o controle de acesso root sobre todo o sistema de arquivos.

Para resolver este problema, a Agência de Segurança Nacional criou o Security Enhanced Linux (SELinux) para fornecer um maior nível de controle sobre arquivos, processos, usuários e aplicativos no sistema operacional Linux. O aprimoramento do SELinux para o kernel Linux implementa a política de Controle de Acesso Obrigatório (MAC), que permite definir uma política de segurança que configura permissões granulares para todos os usuários, programas, processos, arquivos e dispositivos. As decisões de controle de acesso do kernel se baseiam na sensibilidade dos recursos de uma perspectiva de segurança e não apenas na identidade do usuário autenticado.

Quando ocorre acesso relevante à segurança, como quando um processo abre um arquivo, o SELinux intercepta a operação no kernel. Se uma regra de política MAC permitir a operação, ela continuará. Caso contrário, o SELinux bloqueia a operação e retorna um erro ao processo. O kernel verifica e impõe regras de política DAC antes das regras MAC, portanto não verifica as regras de política do SELinux se as regras DAC já tiverem negado acesso a um recurso.

Descrições do Pacote SELinux

O SELinux contém vários pacotes, cada um contendo utilitários específicos que você pode usar para administrar o SELinux nos sistemas Oracle Linux. Alguns pacotes são instalados por padrão, enquanto outros pacotes são opcionais.

A tabela a seguir lista os pacotes do SELinux instalados por padrão com o Oracle Linux.

Pacote

Descrição

policycoreutils

Fornece utilitários como load_policy, restorecon, secon, setfiles, semodule, sestatus e setsebool para operar e gerenciar o SELinux.

libselinux

Fornece a API que os aplicativos SELinux usam para obter e definir contextos de segurança de processos e arquivos e para obter decisões de política de segurança.

python3-libselinux

Contém associações Python para desenvolvimento de aplicativos SELinux.

selinux-policy

Fornece a Política de Referência do SELinux, que é usada como base para outras políticas, como a política de destino do SELinux.

selinux-policy-targeted

Fornece a política direcionada do SELinux, em que objetos fora dos domínios direcionados são executados no DAC.

libselinux-utils

Fornece os utilitários avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled e setenforce.

A tabela a seguir lista pacotes SELinux úteis que não são instalados por padrão. Instale todos os pacotes necessários usando o comando dnf.

Pacote

Descrição

mcstrans

Traduz os níveis do SELinux, como s0-s0:c0.c1023, para um formato mais fácil de ler, como SystemLow-SystemHigh.

policycoreutils-python-utils

Fornece utilitários Python para operar SELinux, como audit2allow, audit2why, chcat e semanage.

policycoreutils-sandbox

Fornece o utilitário de sandbox para criar sandboxes do SELinux para executar comandos em um domínio do SELinux restrito.

selinux-policy-mls

Fornece uma política rigorosa de Segurança Multinível (MLS) como uma alternativa à política direcionada do SELinux.

selinux-policy-doc Fornece páginas manuais para muitos elementos de política do SELinux.

setroubleshoot

Permite que você exiba mensagens do setroubleshoot-server usando o comando sealert.

setroubleshoot-server

Traduz mensagens de negação de acesso do SELinux em descrições detalhadas que você pode exibir na linha de comando usando o comando sealert.

setools-console

Fornece a distribuição de ferramentas e bibliotecas SETools da Tresys Technology, que você pode usar para analisar e consultar políticas, monitorar e relatar logs de auditoria e gerenciar o contexto do arquivo.

Para obter mais informações, consulte o SELinux Project Wiki para documentação da comunidade e o selinux(8) e outras páginas de manual de comando do SELinux.

Utilitários SELinux

A tabela a seguir descreve os principais utilitários que você pode usar para administrar o SELinux e os pacotes que os contêm.

Utilitário

Pacote

Descrição

audit2allow

policycoreutils-python-utils

Gera regras allow da política do SELinux (e entradas dontaudit opcionais) de logs de auditoria de operações negadas.

audit2why

policycoreutils-python-utils

Analisa logs de negação para explicar por que o acesso foi bloqueado e recomenda ajustes relevantes do SELinux.

avcstat

libselinux-utils

Exibe estatísticas do AVC (Access Vector Cache) do SELinux.

chcat

policycoreutils-python-utils

Altera ou remove a categoria de segurança de um arquivo ou usuário.

chcon

coreutils

Altera o contexto do SELinux de arquivos e diretórios.

fixfiles

policycoreutils

Corrige o contexto de segurança para sistemas de arquivos.

getenforce

libselinux-utils

Relata o modo SELinux atual.

getsebool

libselinux-utils

Relata valores boolianos do SELinux.

load_policy

policycoreutils

Carrega uma nova política do SELinux no kernel.

matchpathcon

libselinux-utils

Consulta a política do sistema e exibe o contexto de segurança padrão associado ao caminho do arquivo.

restorecon

policycoreutils

Redefine o contexto de segurança em um ou mais arquivos.

restorecond

policycoreutils

Daemon que verifica a criação de arquivo e define o contexto de arquivo padrão.

runcon

coreutils

Executa um comando dentro do contexto especificado.

sandbox

policycoreutils-sandbox

Executa um comando em um sandbox do SELinux.

sealert

setroubleshoot-server, setroubleshoot

Atua como a interface do usuário para o sistema setroubleshoot para diagnosticar e explicar as negações do SELinux AVC e fornecer recomendações sobre como evitar essas negações.

sechecker

setools-console

Verifica políticas do SELinux.

secon

policycoreutils

Exibe o contexto do SELinux a partir de um arquivo, programa ou entrada de usuário.

sediff

setools-console

Compara políticas do SELinux.

seinfo

setools-console

Consulta políticas do SELinux.

selinuxconlist

libselinux-utils

Exibe todos os contextos do SELinux que são acessíveis por um usuário.

selinuxdefcon

libselinux-utils

Exibe o contexto padrão do SELinux para um usuário.

selinuxenabled

libselinux-utils

Indica se o SELinux está ativado.

semanage

policycoreutils-python-utils

Gerencia políticas do SELinux.

semodule

policycoreutils

Gerencia módulos de política do SELinux.

semodule_deps

policycoreutils

Exibe as dependências entre pacotes de políticas do SELinux.

semodule_expand

policycoreutils

Expande um pacote de módulos de política do SELinux.

semodule_link

policycoreutils

Vincula pacotes de módulos de política do SELinux.

semodule_package

policycoreutils

Cria um pacote do módulo de política do SELinux.

sesearch

setools-console

Consulta políticas do SELinux.

sestatus

policycoreutils

Exibe o modo SELinux e a política SELinux que estão em uso.

setenforce

libselinux-utils

Altera o modo SELinux.

setsebool

policycoreutils

Define valores boolianos do SELinux.

setfiles

policycoreutils

Define o contexto de segurança para um ou mais arquivos.

Definindo Modos do SELinux

O SELinux é executado no modo enforcing ou permissive:

enforcing

O kernel nega acesso a usuários e programas se eles não receberem permissões por regras de política de segurança do SELinux. Todas as mensagens de negação são registradas como negações AVC (Cache de Vetor de Acesso). Este é o modo padrão.

permissive

O kernel não impõe regras de política de segurança, mas o SELinux envia mensagens de negação para um arquivo de log. Isso permite que você veja quais ações seriam negadas se o SELinux estivesse em execução no modo enforcing. Use este modo para ajudá-lo a implementar o SELinux em um sistema de forma eficaz.

Para exibir o modo SELinux atual, execute o seguinte comando:

getenforce

Para definir o modo atual como enforcing, execute o seguinte comando:

sudo setenforce enforcing

Para definir o modo atual como permissive, execute o seguinte comando:

sudo setenforce permissive
Observação

O valor que você define para um modo usando setenforce não persiste nas reinicializações. Para configurar o modo SELinux padrão, edite o arquivo de configuração para SELinux, /etc/selinux/config e defina o valor da diretiva SELINUX como enforcing ou permissive.

Desativando o SELinux

Você pode desativar totalmente o SELinux definindo o parâmetro de kernel selinux como zero.

Importante

A Oracle não recomenda a desativação do SELinux em sistemas de produção. Use o modo permissive.

  1. Defina o parâmetro de kernel necessário.

    Use o utilitário grubby para definir o parâmetro selinux como zero:

    sudo grubby --update-kernel ALL --args selinux=0
  2. Reinicie o sistema.
  3. Verifique se o SELinux está desativado.

    Execute o comando getenforce e verifique se a saída é Disabled:

    getenforce
    Disabled
  4. (Opcional) Reativar SELinux

    Para reativar o SELinux, insira o seguinte comando e reinicie o sistema:

    sudo grubby --update-kernel ALL --remove-args selinux

Instalando a Documentação da Política

O SELinux é complexo, com muitas opções para configurar acesso, usando políticas. Você pode obter informações detalhadas sobre as políticas disponíveis nas páginas manuais que o pacote selinux-policy-doc fornece. Esta tarefa mostra como acessar essas informações.

A documentação da política também contém informações sobre usuários e atribuições. Por exemplo, você pode ler mais sobre o usuário user_u sem privilégios do SELinux e a atribuição user_r na página manual user_selinux(8). A documentação da política descreve as restrições que se aplicam a diferentes contextos de segurança e quais opções Boolianas estão disponíveis para personalizar a política de um ambiente.

  1. Instale o pacote:
    sudo dnf install -y selinux-policy-doc
  2. Atualizar o banco de dados de página manual:
    sudo mandb
  3. Navegue pelas páginas de manual da política do SELinux. Para obter uma listagem completa de toda a documentação manual do SELinux, execute:
    man -k _selinux