Segurança Avançada com SELinux: Configuração, Políticas e Casos de Uso
A segurança é uma das principais preocupações para sysadmins e DevOps engineers. O SELinux (Security-Enhanced Linux) oferece um conjunto robusto de funcionalidades para reforçar a segurança em sistemas Linux. Este artigo irá guiá-lo através das funcionalidades avançadas do SELinux, incluindo configuração, criação de políticas personalizadas e casos de uso práticos.
O que é SELinux e por que é importante?
O SELinux é uma arquitetura de segurança de domínio obrigatório (MAC) integrada ao kernel do Linux. Ele fornece um mecanismo para suportar múltiplos domínios de segurança e é usado para confinar programas e processos. A importância do SELinux reside na sua capacidade de fornecer uma camada adicional de segurança, reduzindo o risco de exploração de vulnerabilidades.
Configurando o SELinux
A configuração do SELinux é feita através do arquivo /etc/selinux/config. Vamos ver como ativar e configurar o SELinux.
SELINUX=enforcing
SELINUXTYPE=targeted
Neste exemplo, o SELinux está configurado para operar no modo enforcing, o que significa que as políticas são aplicadas e os acessos são negados conforme as regras definidas. O tipo targeted aplica proteções a um conjunto selecionado de serviços e daemons.
Criando Políticas Personalizadas
As políticas do SELinux são definidas em módulos. Um módulo consiste em um arquivo de política e um arquivo de interface. Vamos criar uma política simples para permitir que um serviço acesse um diretório específico.
# Criar diretório e definir contexto de segurança
sudo mkdir /var/myapp
sudo chcon -t httpd_sys_content_t /var/myapp
# Criar arquivo de política
sudo tee /var/tmp/myapp.te >/dev/null <<'EOF'
module myapp 1.0;
require {
type httpd_t;
type httpd_sys_content_t;
class dir { read getattr };
}
#============= httpd_t ============
allow httpd_t httpd_sys_content_t:dir { read getattr };
EOF
# Compilar e instalar a política
sudo checkmodule -M -m -o /var/tmp/myapp.mod /var/tmp/myapp.te
sudo semodule_package -o /var/tmp/myapp.pp -m /var/tmp/myapp.mod
sudo semodule -i /var/tmp/myapp.pp
Casos de Uso Práticos
Protegendo um Servidor Web
Um dos usos mais comuns do SELinux é proteger servidores web. Vamos ver como configurar o SELinux para um servidor Apache.
# Instalar Apache
sudo apt install apache2 # Para Debian/Ubuntu
sudo yum install httpd # Para CentOS/RHEL
# Iniciar e habilitar o serviço
sudo systemctl start apache2
sudo systemctl enable apache2
# Verificar contextos de segurança
ls -Z /var/www/html
Isolamento de Containers
O SELinux também pode ser usado para melhorar a segurança de containers Docker. Vamos ver como aplicar políticas SELinux a um container.
# Criar um container com SELinux habilitado
sudo docker run -d --security-opt label=type:svirt_sandbox_t --name myapp myapp-image
# Verificar contextos de segurança do container
sudo docker exec -it myapp ls -Z /var/myapp
Por que isso importa / Quando usar
O SELinux é crucial em ambientes onde a segurança é uma prioridade. Ele deve ser usado em servidores de produção, especialmente aqueles expostos à internet, como servidores web, bancos de dados e aplicações críticas. O SELinux fornece uma camada adicional de segurança que pode prevenir ataques e reduzir o impacto de vulnerabilidades.
Conexão com Certificações LPI/CompTIA
Dominar o SELinux é essencial para sysadmins e DevOps engineers que buscam certificações LPI (Linux Professional Institute) e CompTIA. A certificação LPI 202-450, por exemplo, cobre tópicos avançados de segurança, incluindo SELinux. Entender e aplicar SELinux não apenas melhora a segurança dos sistemas, mas também prepara você para esses exames de certificação.