Guia do Iniciante do SELinux


Uma tradução do artigo foi preparada para os alunos do curso Linux Security.




O SELinux ou Security Enhanced Linux é um mecanismo avançado de controle de acesso desenvolvido pela Agência de Segurança Nacional dos EUA (NSA) para impedir invasões maliciosas. Ele implementa um modelo de controle de acesso forçado (ou obrigatório) (Eng. Controle de Acesso Obrigatório, MAC) sobre o modelo existente (ou seletivo) existente (Controle de Acesso Discricionário, DAC), ou seja, permissões para ler, escrever, executar.


O SELinux possui três modos:


  1. Aplicação - Negação de acesso com base em regras de política.
  2. Permissivo - ações de log que violam políticas que seriam proibidas no modo de imposição.
  3. Desativado - Desative completamente o SELinux.

Por padrão, as configurações estão em /etc/selinux/config


Alterando os modos SELinux


Para descobrir o modo atual, execute


 $ getenforce 

Para alterar o modo para permissivo, execute o seguinte comando


 $ setenforce 0 

ou, para mudar o modo de permissivo para impor , faça


 $ setenforce 1 

Se você precisar desativar completamente o SELinux, isso poderá ser feito apenas através do arquivo de configuração


 $ vi /etc/selinux/config 

Para desativar, altere o parâmetro SELINUX da seguinte maneira:


 SELINUX=disabled 

Configuração do SELinux


Cada arquivo e processo é marcado com um contexto do SELinux, que contém informações adicionais como usuário, função, tipo etc. Se esta é a primeira vez que você ativa o SELinux, você deve primeiro configurar o contexto e os rótulos. O processo de rotulagem e contexto é conhecido como rotulagem. Para começar a marcar, no arquivo de configuração, altere o modo para permissivo .


 $ vi /etc/selinux/config SELINUX=permissive 

Após definir o modo permissivo , crie um arquivo oculto vazio chamado autorelabel na raiz


 $ touch /.autorelabel 

e reinicie o computador


 $ init 6 

Nota: usamos o modo permissivo para marcação, porque o uso do modo de imposição pode levar à falha do sistema durante a reinicialização.


Não se preocupe se o download travar em algum arquivo, a marcação leva algum tempo. Após marcar e inicializar seu sistema, você pode ir para o arquivo de configuração e definir o modo de imposição , além de executar:


 $ setenforce 1 

Agora você ativou o SELinux com sucesso em seu computador.


Monitorar logs


Você pode ter algum tipo de erro ao marcar ou enquanto o sistema estava em execução. Para verificar se o seu SELinux está funcionando corretamente e se não bloqueia o acesso a nenhuma porta, aplicativo, etc., você precisa observar os logs. O log do SELinux está localizado em /var/log/audit/audit.log , mas você não precisa ler o log inteiro para encontrar erros. Você pode usar o audit2why para encontrar erros. Execute o seguinte comando:


 $ audit2why < /var/log/audit/audit.log 

Como resultado, você obtém uma lista de erros. Se não houver erros no log, nenhuma mensagem será exibida.


Configurando a política do SELinux


Uma política do SELinux é um conjunto de regras que orientam a segurança do SELinux. Uma política define um conjunto de regras para um ambiente específico. Agora aprenderemos como configurar políticas para permitir o acesso a serviços restritos.


1. Valores lógicos (comutadores)


Comutadores (booleanos) permitem alterar partes de uma política enquanto você trabalha, sem a necessidade de criar novas políticas. Eles permitem que você faça alterações sem reiniciar ou recompilar as políticas do SELinux.


Exemplo
Suponha que desejamos compartilhar o diretório pessoal do usuário via FTP para leitura e gravação, e já o compartilhamos, mas quando tentamos acessar, não vemos nada. Isso ocorre porque a política do SELinux proíbe o servidor FTP de ler e gravar no diretório inicial do usuário. Precisamos alterar a política para que o servidor FTP possa acessar os diretórios pessoais. Vamos ver se há alguma opção para isso, fazendo


 $ semanage boolean -l 

Este comando exibirá uma lista de opções disponíveis com seu estado atual (ativado / desativado / desativado) e descrição. Você pode refinar sua pesquisa adicionando grep para encontrar apenas resultados relacionados a ftp:


 $ semanage boolean -l | grep ftp 

e encontre o seguinte


 ftp_home_dir -> off Allow ftp to read & write file in user home directory 

Essa opção está desativada, portanto, vamos ativá-la com setsebool $ setsebool ftp_home_dir on


Agora, nosso daemon ftp poderá acessar o diretório inicial do usuário.
Nota: você também pode obter uma lista de opções disponíveis sem descrição executando getsebool -a


2. Etiquetas e contexto


Essa é a maneira mais comum de implementar políticas do SELinux. Cada arquivo, pasta, processo e porta é marcado com um contexto do SELinux:


  • Para arquivos e pastas, as tags são armazenadas como atributos estendidos no sistema de arquivos e podem ser exibidas com o seguinte comando:
     $ ls -Z /etc/httpd 
  • Para processos e portas, o núcleo controla a marcação e você pode ver esses rótulos da seguinte maneira:

o processo


 $ ps –auxZ | grep httpd 

porta


 $ netstat -anpZ | grep httpd 

Exemplo
Agora vamos ver um exemplo para entender melhor os rótulos e o contexto. Suponha que tenhamos um servidor da Web que /var/www/html/ /home/dan/html/ vez do diretório /var/www/html/ /home/dan/html/ . O SELinux considerará isso uma violação da política e talvez você não consiga navegar nas suas páginas da web. Isso ocorre porque não configuramos o contexto de segurança associado aos arquivos HTML. Para visualizar o contexto de segurança padrão, use o seguinte comando:


 $ ls –lz /var/www/html -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/ 

Aqui temos httpd_sys_content_t como o contexto para os arquivos html. Precisamos definir esse contexto de segurança para o diretório atual, que agora possui o seguinte contexto:


 -rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/ 

Comando alternativo para verificar o contexto de segurança de um arquivo ou diretório:


 $ semanage fcontext -l | grep '/var/www' 

Também usaremos a semântica para alterar o contexto depois de encontrarmos o contexto de segurança correto. Para alterar o contexto de / home / dan / html, execute os seguintes comandos:


 $ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?' $ semanage fcontext -l | grep '/home/dan/html' /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html 

Após o contexto ser alterado usando a semântica, o comando restorecon carregará o contexto padrão para arquivos e diretórios. Nosso servidor da Web agora poderá ler arquivos da pasta /home/dan/html , pois o contexto de segurança dessa pasta foi alterado para httpd_sys_content_t .


3. Criando políticas locais


Pode haver situações em que os métodos acima são inúteis para você e você obtém erros (avc / negação) no audit.log. Quando isso acontece, você precisa criar uma política local. Você pode encontrar todos os erros com audit2why, conforme descrito acima.


Para resolver erros, você pode criar uma política local. Por exemplo, obtemos um erro relacionado ao httpd (apache) ou smbd (samba), grep erros e criamos uma política para eles:


 apache $ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy samba $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy 

Aqui http_policy e smb_policy são os nomes das políticas locais que criamos. Agora precisamos carregar essas políticas locais criadas na política atual do SELinux. Isso pode ser feito da seguinte maneira:


 $ semodule –I http_policy.pp $ semodule –I smb_policy.pp 

Nossas políticas locais foram carregadas e não devemos mais receber avc ou negar no audit.log.




Foi minha tentativa de ajudá-lo a entender o SELinux. Espero que, depois de ler este artigo, você se sinta mais confortável com o SELinux.

Source: https://habr.com/ru/post/pt460387/


All Articles