SELinux pode parecer assustador e muito difícil de implementar na maioria dos sistemas modernos. No entanto, a configuração do SELinux traz enormes benefícios tanto na aplicação da segurança quanto na solução de problemas.
Este tutorial irá discutir vários conceitos implementados pelo SELinux e explorar vários métodos práticos de implementação do SELinux.
NOTA: Antes de começar, é bom usar os comandos neste tutorial como o usuário root ou um usuário dentro do grupo sudoers.
Instale pacotes SELinux
Vamos instalar vários pacotes SELinux, que por sua vez ajudarão a trabalhar com as políticas SELinux.
Antes de prosseguirmos com a instalação dos pacotes SELinux, é bom verificarmos quais estão instalados no sistema atual.
Na maioria das instalações de distribuições REHL, alguns pacotes são instalados por padrão. Esses pacotes incluem:
- setools - este pacote é usado para monitorar logs, consultar políticas e gerenciamento de arquivos de contexto.
- policycoreutils-python - fornece utilitários de núcleo python para gerenciar SELinux
- policycoreutils - este pacote também fornece utilitários para gerenciar SELinux.
- mcstrans - mcstrans fornece daemon de tradução SELinux, que traduz vários níveis em formatos fáceis que podem ser compreendidos facilmente.
- setools-console - semelhante ao setools.
- Selinux-policy - fornece uma referência para configurar a política SELinux
- Selinux-policy-targeting - semelhante a SELinux-policy
- Libselinux-utils - utilitários SELinux libselinux que ajudam a gerenciar SELinux
- Setroubleshoot-server - ferramentas para solucionar problemas de SELinux
Para verificar quais pacotes já estão instalados em seu sistema, você pode usar o comando rpm -qa e canalizar o resultado para grep para SELinux como:
rpm -qa | grep selinuxlibselinux-utils-2.9-4.el8_3.x86_64
rpm-plugin-selinux-4.14.3-4.el8.x86_64
selinux-policy-oriented-3.14.3-54.el8_3.2.noarca
python3-libselinux-2.9-4.el8_3.x86_64
selinux-policy-3.14.3-54.el8_3.2.noarca
libselinux-2.9-4.el8_3.x86_64
Isso deve dar a você uma saída de todos os pacotes instalados para suporte SELinux
Se nem todos os pacotes SELinux estiverem instalados em seu sistema, use o yum para instalá-los conforme mostrado no comando abaixo:
yum install policycoreutils policycoreutils-python-utils selinux-policy selinux-policy-alvo libselinux-utils setroubleshoot-server setools setools-console mcstransModos e estados do SELinux
Vamos agora começar a brincar com o SELinux, especificamente, os modos SELinux.
Modos SELinux
Quando ativado, o SELinux pode ter três modos possíveis:
- Forçando
- Permissivo
- Desativado
Modo de imposição
Se o modo SELinux for aplicado, ele irá garantir que nenhum acesso não autorizado ao sistema por qualquer usuário ou processo seja negado. O modo de imposição também mantém registros de quaisquer tentativas de acesso não autorizado.
Modo Permissivo
O modo permissivo atua como um estado SELinux parcialmente habilitado. Neste modo, nenhum acesso é negado, pois o SELinux não impõe suas políticas neste modo. No entanto, o modo permissivo mantém um registro de todas as tentativas de violação de política. Este modo é muito eficiente para testar antes de habilitá-lo totalmente, pois os usuários e componentes ainda podem interagir com o sistema, mas ainda coletam logs. Isso permite que você ajuste seu sistema da maneira que achar melhor.
Modo Desativado
O modo desabilitado também pode ser visto como um estado desabilitado no qual o SELinux está desabilitado e não oferece qualquer segurança.
SELinux States
Uma vez que o SELinux é instalado em um sistema. Pode ter estados binários: habilitado e desabilitado. Para visualizar o estado do SELinux, use o comando:
getenforceDesativado
A saída acima indica que o SELinux está atualmente desativado.
Você também pode usar o comando sestatus conforme mostrado abaixo:
sestatusStatus do SELinux: desativado
Habilitar e desabilitar SELinux
Os estados e a configuração do SELinux são controlados pelo arquivo de configuração localizado em / etc / selinux / config. Você pode usar o comando cat para ver seu conteúdo.
cat / etc / selinux / config# Este arquivo controla o estado do SELinux no sistema.
# SELINUX = pode assumir um destes três valores:
#enforcing - A política de segurança SELinux é aplicada.
#permissive - SELinux imprime avisos em vez de impor.
#disabled - Nenhuma política SELinux carregada.
SELINUX = aplicando
# SELINUXTYPE = pode assumir um destes três valores:
# direcionado - processos direcionados são protegidos,
# mínimo - Modificação da política direcionada. Apenas os processos selecionados são protegidos.
# mls - Proteção de segurança multinível.
SELINUXTYPE = direcionado
A partir da saída acima, temos duas diretivas principais habilitadas. A diretiva SELINUX especifica o modo em que o SELinux é configurado. A diretiva SELINUXTYPE especifica o conjunto de políticas SELinux. Por padrão, o SELinux usa uma política direcionada que permite que você personalize as permissões de controle de acesso. A outra política é a segurança multinível ou MLS.
Você pode encontrar política mínima em algumas versões.
cd / etc / selinux /[ls -l
total 4
-rw-r - r-- 1 root root 548 16 de fevereiro 22:40 config
drwxr-xr-x 1 root root 4096 16 de fevereiro 22:43 mls
-rw-r - r-- 1 root root 2425 21 de julho de 2020 semanage.conf
drwxr-xr-x 1 root root 4096 16 de fevereiro 22:40 direcionado
Vamos agora ver como habilitar SELinux no sistema. Recomendamos primeiro definir o modo SELINUX para permissivo e não obrigatório.
nano / etc / selinux / configAgora edite a diretiva SELINUX como:
SELINUX = permissivoDepois de salvar o arquivo, reinicie o sistema.
reinícioNOTA: É altamente recomendável definir a diretiva SELINUX como permissiva antes de aplicar o SELinux.
Depois de reiniciar o sistema, verifique se há todos os logs relatados pelo SELinux em / var / log / messages.
Em seguida, certifique-se de que não há erros e aplique o SELinux configurando a diretiva para aplicar em / etc / selinux / config
Finalmente, você pode visualizar o status do SELinux usando o comando sestatus:
Status do SELinux: habilitadoMontagem SELinuxfs: / sys / fs / selinux
Diretório raiz do SELinux: / etc / selinux
Nome da política carregada: direcionada
Modo atual: impondo
Modo do arquivo de configuração: erro (sucesso)
Status da política MLS: habilitado
Status deny_unknown da política: permitido
Verificação de proteção de memória: real (seguro)
Versão máxima da política do kernel: 31
Você também pode usar o comando setenforce para alternar entre vários modos SELinux. Por exemplo, para definir o modo como permissivo, use o comando:
setenforce permissivoEste modo é temporário e será restaurado para um no arquivo de configuração após uma reinicialização.
sestatus SELinux status: habilitadoMontagem SELinuxfs: / sys / fs / selinux
Diretório raiz do SELinux: / etc / selinux
Nome da política carregada: direcionada
Modo atual: permissivo
Modo do arquivo de configuração: aplicando
Status da política MLS: habilitado
Status deny_unknown da política: permitido
Verificação de proteção de memória: real (seguro)
Versão máxima da política do kernel: 31
Política e contexto do SELinux
Para evitar confusão para iniciantes do SELinux, não vamos mergulhar profundamente em como as políticas do SELinux são implementadas, mas simplesmente tocar no assunto para ter uma ideia.
SELinux funciona implementando políticas de segurança. Uma política SELinux se refere a uma regra que é usada para definir direitos de acesso para cada objeto no sistema. Objetos referem-se a usuários, processos, arquivos e funções.
Cada contexto é definido na forma de usuário: função: tipo: nível.
Por exemplo, crie um diretório em seu diretório inicial e visualize seu contexto de segurança SELinux conforme mostrado nos comandos abaixo:
mkdir ~ / linuxhint_dirls -Z ~ / | grep linuxhint
Isso exibirá a saída conforme mostrado abaixo:
unconfined_u: object_r: user_home_t: s0 linuxhint_dirVocê também pode encontrar outros diretórios com contextos de segurança como:
sistema: _u: object_r: user_home_t: s0Você pode perceber que a saída acima segue a sintaxe do usuário: função: tipo: nível.
Conclusão
Esse foi um tutorial para iniciantes em SELinux usando CentOS 8. Embora o tutorial seja projetado para iniciantes, é mais do que suficiente para começar a trabalhar no SELinux e remover a natureza intimidante do SELinux.
Obrigado por ler.