===== Gerenciamento do SELinux - Nível Básico =====
==== Nível Básico ====
* **Verificar o status atual do SELinux:**
- sestatus
- Exibe o status do **SELinux**, incluindo o modo de operação atual (Enforcing, Permissive ou Disabled).
* **Verificar o modo do SELinux no arquivo de configuração:**
- cat /etc/selinux/config
- Exibe o conteúdo do arquivo de configuração do SELinux, indicando o modo configurado para o próximo boot.
* **Habilitar o modo Permissive temporariamente:**
- sudo setenforce 0
- Coloca o SELinux no modo **Permissive**, onde as políticas são verificadas, mas não são aplicadas. Isso é útil para identificar problemas sem interromper o sistema.
* **Habilitar o modo Enforcing temporariamente:**
- sudo setenforce 1
- Coloca o SELinux no modo **Enforcing**, onde as políticas de segurança são aplicadas e qualquer violação será bloqueada.
* **Verificar o contexto de segurança de um arquivo:**
- ls -Z /caminho/arquivo
- Exibe o **contexto de segurança** associado ao arquivo, mostrando informações como o usuário, papel, tipo e domínio do SELinux.
* **Alterar o contexto de segurança de um arquivo ou diretório:**
- sudo chcon -t httpd_sys_content_t /var/www/html/index.html
- Altera o contexto de segurança de um arquivo ou diretório, no caso acima, ajustando para o tipo **httpd_sys_content_t**, usado por servidores web.
* **Restaurar o contexto de segurança original de um arquivo:**
- sudo restorecon /var/www/html/index.html
- Restaura o contexto de segurança original de um arquivo ou diretório, baseado nas regras padrão do sistema.
* **Verificar eventos recentes de violação de política do SELinux:**
- sudo ausearch -m avc
- Busca no log de auditoria do **SELinux** por eventos de controle de acesso violado (AVC), mostrando potenciais problemas.
* **Exibir logs do SELinux:**
- sudo cat /var/log/audit/audit.log | grep AVC
- Exibe todos os logs do **audit.log** relacionados a violações de políticas do SELinux (denominação AVC).
===== Gerenciamento do SELinux - Nível Intermediário =====
==== Nível Intermediário ====
* **Alterar permanentemente o modo de operação do SELinux:**
- sudo nano /etc/selinux/config
- Edite o arquivo de configuração para alterar o modo de operação do SELinux de forma permanente. Ajuste a linha `SELINUX=enforcing`, `permissive` ou `disabled`, conforme necessário.
* **Listar os Booleans do SELinux disponíveis:**
- sudo getsebool -a
- Lista todas as configurações **Booleanas** do SELinux, que são opções de controle granular das políticas de segurança.
* **Ativar ou desativar um Boolean temporariamente:**
- sudo setsebool httpd_can_network_connect 1
- Ativa o Boolean **`httpd_can_network_connect`**, permitindo que o servidor web (HTTPD) faça conexões de rede. A configuração será perdida após o reinício do sistema.
* **Ativar um Boolean de forma permanente:**
- sudo setsebool -P httpd_can_network_connect 1
- Ativa o Boolean **`httpd_can_network_connect`** de forma permanente, preservando a configuração após o reinício do sistema.
* **Verificar o contexto de segurança de um processo:**
- ps -eZ | grep httpd
- Exibe o **contexto de segurança** dos processos associados ao serviço HTTPD (ou qualquer outro processo), mostrando como o SELinux está gerenciando esses processos.
* **Trocar o contexto de segurança de um processo em execução:**
- sudo runcon -t httpd_t /bin/bash
- Executa um novo shell com o contexto de segurança de **httpd_t**, simulando a execução de um processo com as permissões aplicadas ao serviço de HTTP.
* **Exibir eventos de AVC detalhados e filtrar por data:**
- sudo ausearch -m avc -ts today
- Busca nos logs de auditoria do **SELinux** por eventos de **AVC** (Access Vector Cache) ocorridos hoje, ajudando a diagnosticar problemas de acesso.
* **Gerar um relatório simplificado sobre as violações do SELinux:**
- sudo sealert -a /var/log/audit/audit.log
- Gera um relatório detalhado de violações, com explicações e sugestões para resolver os problemas encontrados no **audit.log**.
* **Restaurar o contexto de segurança de um diretório recursivamente:**
- sudo restorecon -R /var/www
- Restaura o contexto de segurança de todos os arquivos e subdiretórios dentro de `/var/www`, garantindo que eles obedeçam às políticas padrão.
* **Modificar o tipo de um arquivo para ser utilizado pelo Samba:**
- sudo chcon -t samba_share_t /srv/samba/public
- Altera o tipo de contexto de segurança de um diretório para **samba_share_t**, permitindo que o serviço **Samba** tenha acesso ao conteúdo.
===== Gerenciamento do SELinux - Nível Avançado =====
==== Nível Avançado ====
* **Permitir um domínio específico acessar um arquivo específico (Usar audit2allow):**
- **Gerar uma regra baseada em eventos de auditoria:**
sudo ausearch -m avc -ts recent | audit2allow
- Gera uma política SELinux para permitir um acesso bloqueado recente com base nos eventos de **AVC**.
* **Criar um módulo de política para permitir acessos bloqueados:**
- **Gerar o módulo:**
sudo ausearch -m avc -ts recent | audit2allow -M mypolicymodule
- **Instalar o módulo gerado:**
sudo semodule -i mypolicymodule.pp
- Cria e instala um módulo de política baseado nas violações recentes do SELinux, permitindo o acesso bloqueado.
* **Listar todos os módulos de política instalados:**
- sudo semodule -l
- Exibe uma lista de todos os módulos de política instalados no sistema.
* **Remover um módulo de política personalizado:**
- sudo semodule -r mypolicymodule
- Remove o módulo de política personalizado chamado `mypolicymodule`, revertendo quaisquer permissões que ele tenha aplicado.
* **Verificar permissões para arquivos específicos:**
- sudo sesearch --allow --source httpd_t --target file_t
- Verifica se o contexto de origem `httpd_t` (por exemplo, um servidor web) tem permissão para acessar arquivos com o contexto `file_t`.
* **Desbloquear permissões específicas para um serviço:**
- **Exemplo para desbloquear o serviço SSH:**
sudo semanage permissive -a sshd_t
Coloca o domínio `sshd_t` em modo permissivo, permitindo que o serviço SSH funcione sem ser bloqueado por políticas SELinux.
* **Criar uma política personalizada para um serviço:**
- **Criar um arquivo de política de exemplo:**
sudo nano myservice.te
Adicione as definições de política no arquivo `.te`:
```
module myservice 1.0;
require {
type httpd_t;
type myservice_exec_t;
class file { read write execute };
}
allow httpd_t myservice_exec_t:file { read write execute };
```
- **Compilar e aplicar o módulo de política:**
sudo checkmodule -M -m -o myservice.mod myservice.te
sudo semodule_package -o myservice.pp -m myservice.mod
sudo semodule -i myservice.pp
Cria e instala uma política personalizada para um serviço chamado `myservice`, controlando as permissões de acesso a arquivos.
* **Listar as permissões de Booleans e ajustá-las para múltiplos serviços:**
- sudo semanage boolean -l | grep httpd
- Filtra os Booleans relacionados ao serviço **httpd**, permitindo ajustes simultâneos em permissões como rede, scripts e serviços.
* **Configurar permissões avançadas de rede (TCP e UDP) via Booleans:**
- sudo setsebool -P allow_tcpd_read 1
- Permite que um serviço leia dados via TCP, ajustando permissões de rede no **SELinux**.
* **Habilitar permissões de rede para containers (como Docker):**
- sudo setsebool -P virt_use_nfs 1
- Ativa permissões no SELinux para que máquinas virtuais ou containers acessem sistemas de arquivos NFS.
* **Restaurar o contexto de segurança para um sistema inteiro:**
- sudo restorecon -R -v /
- Restaura os contextos de segurança para todos os arquivos e diretórios do sistema, útil após modificações profundas nas políticas SELinux.
* **Verificar o mapeamento de portas para contextos de segurança do SELinux:**
- sudo semanage port -l
- Lista todas as portas associadas a contextos de segurança no SELinux, mostrando quais serviços podem usar determinadas portas.
* **Adicionar um mapeamento de porta personalizado para um serviço:**
- sudo semanage port -a -t http_port_t -p tcp 8081
- Mapeia a porta TCP 8081 para o contexto de segurança **http_port_t**, permitindo que servidores HTTP usem essa porta.