Product SiteDocumentation Site

Capítulo 3. Contextos de SELinux

3.1. Transiciones de Dominios
3.2. Contextos de SELinux para los Procesos
3.3. Contextos de SELinux para los Usuarios
Los procesos y archivos se etiquetan con un contexto SELinux que contiene información adicional, tal como un usuario SELinux, rol, tipo y, opcionalmente, un nivel. Cuando se ejecuta SELinux, toda esta información se usa para tomar decisiones de control de acceso. En Fedora 11, SELinux provee una combinación de Control de Acceso Basado en Roles (RBAC en inglés), Obligación de Tipos® (TE en inglés), y, opcionalmente, Seguridad Multi-nivel (MLS en inglés).
El siguiente es un ejemplo de contexto de SELinux. Los contextos de SELinux se usan en procesos, usuarios de Linux y archivos, en sistemas operativos Linux que corren SELinux. Use el comando ls -Z para ver el contexto SELinux de archivos y directorios:
$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
Los contextos de SELinux siguen la SELinux nombre-de-usuario:role:type:level sintaxis:
Usuario SELinux
La identidad de usuario SELinux es una identidad conocida para la política a la que se le autoriza un conjunto específico de roles, y un rango específico de MLS. Cada usuario Linux se mapea a un usuario SELinux vía la política de SELinux. Esto permite a los usuarios de LInux heredar las restricciones de los usuarios SELinux. La identidad del usuario SELinux mapeado se usa en el contexto de SELinux para procesos en esa sesión, para agrupar a qué roles y niveles pueden ingresar. Ejecute el comando semanage login -l como usuario root de Linux para ver una lista de mapeos entre cuentas de usuarios Linux y SELinux:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
La salida puede ser distinta de sistema a sistema. La columna Nombre de Ingreso lista los usuarios Linux, y la columna Usuario SELinux lista qué a usuario SELinux es mapeado un usuario Linux. Para procesos, el usuario SELinux limita qué roles y niveles son accesibles. La última columna, Rango MLS/MCS, es el nivel usado por la Seguridad Multi Nivel (MLS) y por la Seguridad Multi Categoría (MCS). Los niveles se describen brevemente más adelante.
rol
Parte de SELinux es el modelo de seguridad de Control de Acceso Basado en Roles (RBAC). El rol es un atributo de RBAC. Los usuarios de SELinux son autorizados para ciertos roles y los roles son autorizados para ciertos dominios. Los roles sirven como un intermediario entre dominios y usarios SELinux. Los roles en los que se puede ingresar determinan los dominios a los que se ingresan - al final, esto controla los tipos de objetos que se pueden acceder. Esto ayuda a reducir la vulnerabilidad de ataques de escalada de privilegios.
tipo
El tipo es un atributo de la Obligación de Tipos. El tipo define un dominio para procesos y un tipo para los archivos. Las reglas de políticas de SELinux define cómo se acceden los tipos entre si, ya sea un dominio que accede a un tipo o un dominio que accede a otro dominio. Los acceso sólo se permiten si existe una regla de política de SELinux que lo permita.
nivel
El nivel es un atributo de MLS y la Seguridad Multi Categoría (MCS). Un rango MLS es un par de niveles, escrito como bajonivel-altonivel si los niveles sin distintos, o bajonivel si los niveles son idénticos (s0-s0 es lo mismo que s0). Cada nivel es un par sensible a categorías, donde las categorías son opcionales. Si no hay categorías, el nivel se escribe como sensibilidad:conjunto-de-categoría. Si no hay categorías, se escribe como sensibilidad.
Si el conjunto de categoría es una serie contigua, se puede abreviar. Por ejemplo, c0.c3 es lo mismo que c0,c1,c2,c3. El archivo /etc/selinux/targeted/setrans.conf mapea los niveles (s0:c0) a una forma legible al humano (CompanyConfidential). No edite setrans.conf con un editor de texto: use semanage para hacer cambios. Vaya a la página de manual de semanage(8) para más información. En Fedora 11, la política destinada obglica MCS, y en MCS hay sólo una sensibilidad, la s0. MCS en Fedora 11 soporta 1024 categorías distintas: c0 a c1023. s0-s0:c0.c1023 es la sensibilidad s0 y autorizado para todas las categorías.
MLS aplica el Modelo de Acceso Obligatorio Bell-LaPadula, y se usa en entornos de Perfil de Protección de Seguirdad Etiquetada (LSPP en inglés). Para usar las restricciones MLS, instale el paquete selinux-policy-mls, y configure a MLS como la política de SELinux predeterminada. La política MLS puesta en Fedora mite muchos dominios de programa que no eran parte de la configuración evaluada, y por lo tanto, MLS es inútil en un escritorio (no hay soporte para el Sistema de Ventanas X); sin embargo, una política MLS se puede incluir desde los desarrolladores de la Política de Referencia de SELinux que incluya todos los dominios de programa.

3.1. Transiciones de Dominios

Un proceso transiciona de un dominio a otro ejecutando una aplicación que tiene el tipo entrypoint en el nuevo dominio. Los permisos entrypoint se usan en las políticas de SELinux, y controlan qué aplicaciones pueden usarse para ingresar a un dominio. El siguiente ejemplo muestra una transición de dominio.
  1. Un usuario desea cambiar su contraseña. Para cambiar sus contraseñas, corren la aplicación passwd. El ejecutable /usr/bin/passwd está etiquetado con el tipo passwd_exec_t:
    $ ls -Z /usr/bin/passwd
    -rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
    
    La aplicación passwd accede /etc/shadow, que está etiquetado con el tipo shadow_t:
    $ ls -Z /etc/shadow
    -r--------  root root system_u:object_r:shadow_t:s0    /etc/shadow
    
  2. Una regla de política de SELinux dice que los procesos que se ejecutan en el dominio passwd_t no pueden leer y escribir archivos etiquetados con el tipo shadow_t. El tipo shadow_t sólo se aplica a archivos que necesitan un cambio de contraseñas. Esto incluye a /etc/gshadow, /etc/shadow, y sus archivos de respaldo.
  3. Una regla de política de SELinux fija que el dominio passwd_t tiene permiso de entrypoint al tipo passwd_exec_t.
  4. Cuando un usuario ejecuta la aplicación /usr/bin/passwd, el proceso shell del usuario transiciona al dominio passwd_t. Con SELinux, dado que la acción por defecto es negar, y existe una regla que permite (entre otras cosas) a aplicaciones que corran en el dominio passwd_t acceder a archivos etiquetados con el tipo shadow_t, se le permite a passwd acceder a /etc/shadow, y actualizar la contraseña del usuario.
Este ejemplo no es exhaustivo, y se usa como un ejemplo básico para explicar la transición de dominio. Aunque hay una regla actual que permite a sujetos corriendo en el dominio passwd_t accedan objetos etiquetados con el tipo de archivo shadow_t, otras reglas de política de SELinux se deben cumplir para que el sujeto pueda transicionar a un nuevo dominio. En este ejemplo, la Obligación de Tipo asegura:
  • el dominio passwd_t sólo se puede ingresar ejecutando una aplicación con la etiqueta del tipo passwd_exec_t; sólo pueden ejecutar desde bibliotecas compartidas autorizadas, tales como las del tipo lib_t; y no pueden ejecutar ninguna otra aplicación.
  • sólo los dominios autorizados, tales como passwd_t, pueden escribir en archivos con la etiqueta del tipo shadow_t. Aún si otros procesos corren con privilegios de superusuario, esos procesos no podrán escribir archivos etiquetados con el tipo shadow_t, porque no están corriendo en el dominio passwd_t.
  • sólo los dominios autorizados pueden transicionar al dominio passwd_t. Por ejemplo, el proceso sendmail corriendo en el dominio sendmail_t no tiene una razón legítima para ejecutar passwd; por lo tanto, no puede transicionar nunca al dominio passwd_t.
  • los procesos que se ejecutan en el dominio passwd_t sólo pueden leer y escribir a tipos autorizados, tales como archivos etiquetados con los tipos etc_t o shadow_t. Esto impide a la aplicación passwd de ser modificada para leer o escribir en archivos arbitrarios.