RHEL 7 : SELinux Ports e Booleans

Neste post vou falar o uso do SELinux , abordando dicas para o RHCE .

A estrutura SELinux é uma camada de segurança extra para o sistema operacional, limitando as ações dos usuários , programas e permissionamento de algum processo não autorizado.

SELinux_Decision_Process

1) Modos de Operação

O SELinux pode operar em 3 modos :

  • permissive : Modo que aceita várias interações com a máquina sem exigir qualquer restrição.
  • enforcing :  Este modo precisa ser bem configurado , pois a  interação com este modo depende da permissão de porta e liberação do serviço como será mostrado abaixo.
  • disabled : Desabilita o SELINUX, se você está fazendo a prova da Redhat não é aconselhável para o RHCSA ou RHCE.

Para ver ou setar o estado atual do SELinux é podemos usar os comandos :

getenforce – Ver o estado atual

getenforcesetenforce –  Seta o modelo de operação do SELinux , 0 para permissive e 1 para enforcing

setenforce

2) Booleanos

Booleanos são as opções que são alterados no comportamento do SElinux para regras habilitadas ou não.

Com o comando getsebool -a podemos observar quais são os estados dos booleanos, se estão habilitados ou não  :

Caso precise habilitar algum parâmetro se usa setsebool <label> on

getsebool

 

Alterando o contexto  de um diretório :

Podemos observar se um diretório está habilitado para o contexto a ser utilizado como virtual host do Apache usando os  seguintes passos :

O label utilizado será o httpd_sys_content_t , pois é o label utilizado pelo Apache .

Verificando o label do diretório a ser utilizado com o ls -Zd <direrório> :

selinux checa label

Alterando o contexto e definindo como padrão com o semanage :

selinux contexto

Após estas definições no diretório sempre que for necessário criar um diretório ou arquivo sempre use o comando restorecon -Rv <diretorio> para os arquivos criados poder pegar a permissão de raíz :

restorecon selinux

3) Port security

Após  configurarmos o contexto de um determinado diretório devemos ver se a porta está habilitada para aquele determinado serviço .

Podemos verificar se a porta está listada para o serviço específico com semanage port -l

selinux lista porta

Para setarmos a porta usamos o semanage :

semanage port -a -t <label> -p <tcp ou udp> <porta>

selinux definindo porta

No nosso exemplo a porta 80 já estava definida definida para o label http_port_t   .

A gerência de portas também pode ser feita através da gui com a instalação do pacote policycoreutils -gui .

system config selinux

 

Links úteis :

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html