Capítulo 1. Introducción a SELinux
1.1. Introducción a SELinux
Security Enhanced Linux (SELinux) proporciona una capa adicional de seguridad del sistema. SELinux responde fundamentalmente a la pregunta: May <subject> do <action> to <object>?, por ejemplo May a web server access files in users' home directories?
La política de acceso estándar basada en el usuario, el grupo y otros permisos, conocida como Control de Acceso Discrecional (DAC), no permite a los administradores del sistema crear políticas de seguridad completas y de grano fino, como restringir aplicaciones específicas para que sólo vean los archivos de registro, mientras que se permite a otras aplicaciones añadir nuevos datos a los archivos de registro.
SELinux implementa el Control de Acceso Obligatorio (MAC). Cada proceso y recurso del sistema tiene una etiqueta de seguridad especial llamada SELinux context. Un contexto de SELinux, a veces denominado SELinux label, es un identificador que abstrae los detalles a nivel de sistema y se centra en las propiedades de seguridad de la entidad. Esto no sólo proporciona una forma consistente de referenciar objetos en la política de SELinux, sino que también elimina cualquier ambigüedad que pueda encontrarse en otros métodos de identificación. Por ejemplo, un archivo puede tener múltiples nombres de ruta válidos en un sistema que hace uso de montajes bind.
La política de SELinux utiliza estos contextos en una serie de reglas que definen cómo los procesos pueden interactuar entre sí y con los distintos recursos del sistema. Por defecto, la política no permite ninguna interacción a menos que una regla conceda explícitamente el acceso.
Recuerda que las reglas de política de SELinux se comprueban después de las reglas DAC. Las reglas de política de SELinux no se utilizan si las reglas DAC deniegan el acceso primero, lo que significa que no se registra ninguna denegación de SELinux si las reglas DAC tradicionales impiden el acceso.
Los contextos de SELinux tienen varios campos: usuario, rol, tipo y nivel de seguridad. La información del tipo de SELinux es quizás la más importante cuando se trata de la política de SELinux, ya que la regla de política más común que define las interacciones permitidas entre los procesos y los recursos del sistema utiliza los tipos de SELinux y no el contexto completo de SELinux. Los tipos de SELinux terminan con _t
. Por ejemplo, el nombre del tipo para el servidor web es httpd_t
. El contexto de tipo para los archivos y directorios que normalmente se encuentran en /var/www/html/
es httpd_sys_content_t
. El contexto de tipo para los archivos y directorios que normalmente se encuentran en /tmp
y /var/tmp/
es tmp_t
. El contexto de tipo para los puertos del servidor web es http_port_t
.
Hay una regla de política que permite a Apache (el proceso del servidor web que se ejecuta como httpd_t
) acceder a los archivos y directorios con un contexto que normalmente se encuentra en /var/www/html/
y otros directorios del servidor web (httpd_sys_content_t
). No hay ninguna regla de permiso en la política para los archivos que normalmente se encuentran en /tmp
y /var/tmp/
, por lo que el acceso no está permitido. Con SELinux, incluso si Apache está comprometido, y un script malicioso obtiene acceso, todavía no es capaz de acceder al directorio /tmp
.
Figura 1.1. Un ejemplo de cómo SELinux puede ayudar a ejecutar Apache y MariaDB de forma segura.
Como muestra el esquema anterior, SELinux permite que el proceso de Apache que se ejecuta como httpd_t
acceda al directorio /var/www/html/
y le niega al mismo proceso el acceso al directorio /data/mysql/
porque no existe una regla de permiso para los contextos de tipo httpd_t
y mysqld_db_t
. Por otro lado, el proceso de MariaDB que se ejecuta como mysqld_t
puede acceder al directorio /data/mysql/
y SELinux también deniega correctamente al proceso con el tipo mysqld_t
el acceso al directorio /var/www/html/
etiquetado como httpd_sys_content_t
.
Recursos adicionales
Para más información, consulte la siguiente documentación:
-
La página de manual
selinux(8)
y las páginas de manual listadas por el comandoapropos selinux
. -
Páginas de manual listadas por el comando
man -k _selinux
cuando el paqueteselinux-policy-doc
está instalado. - El libro para colorear de SELinux le ayuda a entender mejor los conceptos básicos de SELinux.
- Preguntas frecuentes de la Wiki de SELinux