SELinux es una importante implementación en el núcleo de Linux que añade una excelente capa de seguridad a cualquier servidor Linux. SELinux (del inglés Security-Enhanced Linux, que se traduce como Seguridad Mejorada de Linux) es una implementación de seguridad para Linux que provee una variedad de políticas de seguridad, incluyendo el estilo de acceso a los controles del Departamento de Defensa de EE.UU., a través del uso de módulos de Seguridad en el núcleo de Linux.
En si es una colección de parches que fueron integrados hace algunos años al núcleo de Linux, fortaleciendo sus mecanismos de control de acceso y forzando la ejecución de los procesos dentro de un entorno con los mínimos privilegios necesarios. Utiliza un modelo de seguridad de control de acceso obligatorio.
Es una implementación compleja y robusta que suele ser muy oscura para la mayoría de los usuarios. Debido a ésto, falta de documentación amistosa y que muchos servicios simplemente son imposibles de operar sin una política correspondiente, muchas personas suelen desactivarlo editando /etc/sysconfig/selinux
. Ésto ―aunque soluciona los problemas de algunos― se considera una mala práctica de administración de servidores.
Resumen rápido de procesamiento de políticas de SELinux
grep -i denied /var/log/audit/audit.log
Lo anterior devuelve los registros de sistema de operaciones que fueron negadas por SELinux.
¿Cómo se procesan estos registros para crear políticas de SELinux?
1) Desactivar temporalmente SELinux:
setenforce 0
2) Realizar todas las operaciones que fallan por culpa de SELinux 3) Validar que todo funciona 4) Crear archivo de políticas:
audit2allow -M varios-20240709 < /var/log/audit/audit.log
5) Para ver el desglose de las políticas generadas para SELinux:
cat varios-20240709.te
Éste es un ejemplo de lo que podría contener el archivo:
module varios-20240709 1.0;
require {
type spamd_t;
type var_lib_t;
class dir { add_name remove_name write };
class file { create unlink write };
}
#============= spamd_t ==============
allow spamd_t var_lib_t:dir { add_name remove_name write };
allow spamd_t var_lib_t:file { create unlink write };
Éste es otro ejemplo:
module varios-20240709 1.0;
require {
type user_tmp_t;
type httpd_t;
type user_home_t;
class dir { add_name create remove_name };
class file { create rename setattr unlink write };
}
#============= httpd_t ==============
allow httpd_t user_home_t:dir { add_name create remove_name };
allow httpd_t user_home_t:file { create rename setattr unlink write };
allow httpd_t user_tmp_t:file { create unlink };
6) Para cargar en sistema un binario las políticas personalizadas de SELinux y que fue creado por audit2allow
usando las reglas del archivo varios-20240709.te
:
semodule -i varios-20240709.pp
Vuelva a establecer SELinux en modo estricto:
setenforce 1
A partir de este punto, las aplicaciones podrán operar normalmente con SELinux en modo estricto gracias a las políticas generadas.