La seguridad en servidores Linux es una prioridad para administradores de sistemas, especialmente en entornos de producción. SELinux (Security-Enhanced Linux) es una poderosa capa de control de acceso obligatorio (MAC) que permite definir políticas estrictas sobre lo que los procesos pueden o no pueden hacer, incluso si ya tienen privilegios de root. Aunque muchas veces se desactiva por su complejidad, configurarlo correctamente puede marcar una gran diferencia en la protección del sistema.
En esta guía, exploraremos cómo implementar una configuración avanzada de SELinux en sistemas Fedora, CentOS y también abordaremos alternativas o complementos en Debian, donde SELinux no es el predeterminado.
¿Qué es SELinux y por qué deberías usarlo?
SELinux es un módulo de seguridad del kernel que aplica reglas basadas en políticas predefinidas. Esto significa que incluso si un proceso legítimo es comprometido, SELinux puede evitar que realice acciones no autorizadas, como acceder a archivos sensibles o establecer conexiones indebidas.
Es especialmente útil en servicios expuestos a internet como servidores web, bases de datos o entornos de contenedores.
SELinux en Fedora y CentOS
Tanto Fedora como CentOS (hasta CentOS 8) traen SELinux instalado y activado por defecto. En sistemas derivados como Rocky Linux o AlmaLinux, el soporte es igualmente completo.
Para verificar el estado actual de SELinux, usá:
sestatus
Modos de operación
SELinux puede funcionar en tres modos:
- Enforcing: aplica las políticas de seguridad activamente (modo recomendado).
- Permissive: registra violaciones sin bloquearlas (útil para pruebas).
- Disabled: desactiva SELinux completamente (no recomendado en producción).
Podés cambiar el modo temporalmente con:
setenforce 0 # Permissive
setenforce 1 # Enforcing
Para hacerlo persistente, editá el archivo /etc/selinux/config
y cambiá la línea:
SELINUX=enforcing
Configuración avanzada con políticas personalizadas
Uno de los puntos fuertes de SELinux es la posibilidad de crear y aplicar políticas personalizadas. Supongamos que estás ejecutando un servidor web en un puerto no estándar, como el 8080.
SELinux bloqueará esta acción por defecto, pero podés permitirla así:
semanage port -a -t http_port_t -p tcp 8080
Otro caso común es el acceso a un directorio específico por parte de Apache:
chcon -R -t httpd_sys_content_t /var/www/misitio
Si querés que Apache pueda escribir en ese directorio:
chcon -R -t httpd_sys_rw_content_t /var/www/misitio
También podés administrar booleanos, que permiten o restringen comportamientos comunes. Por ejemplo:
getsebool -a | grep httpd
setsebool -P httpd_can_network_connect on
SELinux en Debian y derivados
En Debian y Ubuntu, SELinux no viene activado por defecto, ya que se utiliza AppArmor como sistema de control de acceso. Sin embargo, si preferís SELinux, podés instalarlo manualmente:
sudo apt install selinux-basics selinux-policy-default auditd
sudo selinux-activate
Luego, reiniciá el sistema. Al volver, verificá el modo:
sestatus
En Debian, también es posible usar herramientas como audit2allow
para crear módulos personalizados con base en los registros de auditoría.
Auditoría y solución de problemas
SELinux puede ser frustrante cuando bloquea funciones necesarias. La clave está en auditar y ajustar.
Consultá los registros con:
sudo ausearch -m avc -ts recent
Y usá audit2why
para entender por qué ocurrió el bloqueo:
sudo ausearch -m avc | audit2why
Si necesitás crear una política específica para resolver el problema:
sudo ausearch -m avc -ts recent | audit2allow -M mi_politica
sudo semodule -i mi_politica.pp
Conclusión
Configurar SELinux correctamente puede parecer desafiante al principio, pero las ventajas en términos de seguridad son invaluables. Ya sea en Fedora, CentOS o incluso en Debian (con un poco de trabajo adicional), contar con un control de acceso obligatorio te protege contra una amplia gama de amenazas, incluso si un atacante logra entrar al sistema.
¿Ya usás SELinux en tu infraestructura? Compartí tus consejos o dudas en los comentarios. Si te resultó útil este artículo, ¡no dudes en compartirlo!
¿Querés más guías sobre seguridad en servidores Linux? Suscribite y seguí leyendo sobre cortafuegos, listas de control de acceso, auditoría y más.