Administración de SELinux en Oracle Linux

Describe SELinux y proporciona orientación sobre la administración de SELinux en Oracle Linux.

La seguridad tradicional de Linux se basa en una política de control de acceso discrecional (DAC). En el modelo de seguridad del sistema DAC, el acceso a recursos como archivos y procesos se basa únicamente en la identidad y la propiedad del usuario. Si hay malware o software roto en el sistema, puede hacer cualquier cosa con los archivos y recursos que el usuario que inició el proceso tiene permiso para hacer. Si el usuario es root o la aplicación se está ejecutando con privilegios elevados (de setuid o de setgid a root), el proceso tiene control de acceso root sobre todo el sistema de archivos.

Para abordar este problema, la Agencia de Seguridad Nacional creó Security Enhanced Linux (SELinux) para proporcionar un mayor nivel de control sobre archivos, procesos, usuarios y aplicaciones en el sistema operativo Linux. La mejora de SELinux en el núcleo de Linux implementa la política de control de acceso obligatorio (MAC), que le permite definir una política de seguridad que configura permisos granulares para todos los usuarios, programas, procesos, archivos y dispositivos. Las decisiones de control de acceso del núcleo se basan en la sensibilidad de los recursos desde una perspectiva de seguridad, y no solo en la identidad del usuario autenticado.

Cuando se produce un acceso relevante para la seguridad, como cuando un proceso abre un archivo, SELinux intercepta la operación en el núcleo. Si una regla de política MAC permite la operación, continúa. De lo contrario, SELinux bloquea la operación y devuelve un error al proceso. El núcleo comprueba y aplica las reglas de política de DAC antes que las reglas de MAC, por lo que no comprueba las reglas de política de SELinux si las reglas de DAC ya han denegado el acceso a un recurso.

Descripciones de paquetes de SELinux

SELinux contiene varios paquetes, cada uno de los cuales contiene utilidades específicas que puede usar para administrar SELinux en sistemas Oracle Linux. Algunos paquetes se instalan de manera predeterminada, mientras que otros paquetes son opcionales.

En la siguiente tabla, se muestran los paquetes de SELinux instalados de manera predeterminada con Oracle Linux.

Paquete

Descripción

policycoreutils

Proporciona utilidades como load_policy, restorecon, secon, setfiles, semodule, sestatus y setsebool para el funcionamiento y la gestión de SELinux.

libselinux

Proporciona la API que utilizan las aplicaciones de SELinux para obtener y definir contextos de seguridad de archivos y procesos, y para obtener decisiones de políticas de seguridad.

python3-libselinux

Contiene enlaces Python para desarrollar aplicaciones SELinux.

selinux-policy

Proporciona la política de referencia de SELinux, que se utiliza como base para otras políticas, como la política de destino de SELinux.

selinux-policy-targeted

Proporciona la política de destino de SELinux, donde los objetos fuera de los dominios de destino se ejecutan en DAC.

libselinux-utils

Proporciona las utilidades avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled y setenforce.

En la siguiente tabla, se muestran los paquetes útiles de SELinux que no están instalados de manera predeterminada. Instale los paquetes necesarios mediante el comando dnf.

Paquete

Descripción

mcstrans

Traduce los niveles de SELinux, como s0-s0:c0.c1023, a un formulario más fácil de leer, como SystemLow-SystemHigh.

policycoreutils-python-utils

Proporciona utilidades Python para el funcionamiento de SELinux, como audit2allow, audit2why, chcat y semanage.

policycoreutils-sandbox

Proporciona la utilidad sandbox para crear sandboxes de SELinux para ejecutar comandos en un dominio de SELinux estrechamente limitado.

selinux-policy-mls

Proporciona una política estricta de seguridad de varios niveles (MLS) como alternativa a la política de destino de SELinux.

selinux-policy-doc Proporciona páginas manuales para muchos elementos de política de SELinux.

setroubleshoot

Permite ver los mensajes setroubleshoot-server mediante el comando sealert.

setroubleshoot-server

Convierte los mensajes de denegación de acceso de SELinux en descripciones detalladas que puede ver en la línea de comandos mediante el comando sealert.

setools-console

Proporciona la distribución SETools de herramientas y bibliotecas de la tecnología Tresys, que puede utilizar para analizar y consultar políticas, supervisar y generar informes de logs de auditoría y gestionar el contexto de archivos.

Para obtener más información, consulte SELinux Project Wiki for community documentation y las páginas del manual de comandos selinux(8) y otras páginas de SELinux.

Utilidades de SELinux

En la siguiente tabla, se describen las principales utilidades que puede utilizar para administrar SELinux y los paquetes que los contienen.

Utilidad

Paquete

Descripción

audit2allow

policycoreutils-python-utils

Genera reglas allow de política de SELinux (y entradas dontaudit opcionales) a partir de logs de auditoría de operaciones denegadas.

audit2why

policycoreutils-python-utils

Analiza los registros de denegación para explicar por qué se bloqueó el acceso y recomienda ajustes relevantes de SELinux.

avcstat

libselinux-utils

Muestra estadísticas para la caché vectorial de acceso (AVC) de SELinux.

chcat

policycoreutils-python-utils

Cambia o elimina la categoría de seguridad de un archivo o usuario.

chcon

coreutils

Cambia el contexto de SELinux de archivos y directorios.

fixfiles

policycoreutils

Corrige el contexto de seguridad de los sistemas de archivos.

getenforce

libselinux-utils

Informa el modo actual de SELinux.

getsebool

libselinux-utils

Informa los valores booleanos de SELinux.

load_policy

policycoreutils

Carga una nueva política de SELinux en el núcleo.

matchpathcon

libselinux-utils

Consulta la política del sistema y muestra el contexto de seguridad por defecto asociado a la ruta del archivo.

restorecon

policycoreutils

Restablece el contexto de seguridad en uno o más archivos.

restorecond

policycoreutils

Daemon que observa el desarrollo de archivos y define el contexto del archivo por defecto.

runcon

coreutils

Ejecuta un comando en el contexto especificado.

sandbox

policycoreutils-sandbox

Ejecuta un comando en un sandbox de SELinux.

sealert

setroubleshoot-server, setroubleshoot

Actúa como interfaz de usuario para el sistema setroubleshoot para diagnosticar y explicar las denegaciones de AVC de SELinux y proporcionar recomendaciones sobre cómo prevenir dichas denegaciones.

sechecker

setools-console

Comprueba las políticas de SELinux.

secon

policycoreutils

Muestra el contexto SELinux desde un archivo, programa o entrada de usuario.

sediff

setools-console

Compara las políticas de SELinux.

seinfo

setools-console

Consulta las políticas de SELinux.

selinuxconlist

libselinux-utils

Muestra todos los contextos de SELinux a los que puede acceder un usuario.

selinuxdefcon

libselinux-utils

Muestra el contexto de SELinux por defecto para un usuario.

selinuxenabled

libselinux-utils

Indica si SELinux está activado.

semanage

policycoreutils-python-utils

Gestiona las políticas de SELinux.

semodule

policycoreutils

Gestiona los módulos de políticas de SELinux.

semodule_deps

policycoreutils

Muestra las dependencias entre los paquetes de políticas de SELinux.

semodule_expand

policycoreutils

Expande un paquete de módulo de política de SELinux.

semodule_link

policycoreutils

Enlaza los paquetes del módulo de política de SELinux.

semodule_package

policycoreutils

Crea un paquete de módulo de política de SELinux.

sesearch

setools-console

Consulta las políticas de SELinux.

sestatus

policycoreutils

Muestra el modo SELinux y la política de SELinux que están en uso.

setenforce

libselinux-utils

Cambia el modo SELinux.

setsebool

policycoreutils

Define los valores booleanos de SELinux.

setfiles

policycoreutils

Define el contexto de seguridad para uno o más archivos.

Configuración de los modos de SELinux

SELinux se ejecuta en modo enforcing o permissive:

enforcing

El núcleo deniega el acceso a los usuarios y programas si las reglas de la política de seguridad de SELinux no les otorgan permisos. Todos los mensajes de denegación se registran como denegaciones AVC (Access Vector Cache). Éste es el modo predeterminado.

permissive

El núcleo no aplica las reglas de la política de seguridad, pero SELinux envía mensajes de denegación a un archivo log. Esto le permite ver qué acciones se denegarían si SELinux se ejecuta en modo enforcing. Utilice este modo para ayudarle a implantar SELinux en un sistema de forma eficaz.

Para mostrar el modo actual de SELinux, ejecute el siguiente comando:

getenforce

Para definir el modo actual en enforcing, ejecute el siguiente comando:

sudo setenforce enforcing

Para definir el modo actual en permissive, ejecute el siguiente comando:

sudo setenforce permissive
Nota

El valor que define para un modo mediante setenforce no se mantiene tras los reinicios. Para configurar el modo predeterminado de SELinux, edite el archivo de configuración para SELinux, /etc/selinux/config y defina el valor de la directiva SELINUX en enforcing o permissive.

Desactivación de SELinux

Puede desactivar completamente SELinux definiendo el parámetro de núcleo selinux en cero.

Importante

Oracle no recomienda desactivar SELinux en los sistemas de producción. En su lugar, utilice el modo permissive.

  1. Defina el parámetro de núcleo necesario.

    Utilice la utilidad grubby para definir el parámetro selinux en cero:

    sudo grubby --update-kernel ALL --args selinux=0
  2. Reinicie el sistema.
  3. Compruebe que SELinux esté desactivado.

    Ejecute el comando getenforce y verifique que la salida es Disabled:

    getenforce
    Disabled
  4. (Opcional) Reactivar SELinux

    Para volver a activar SELinux, introduzca el siguiente comando y reinicie el sistema:

    sudo grubby --update-kernel ALL --remove-args selinux

Instalación de la documentación de políticas

SELinux es complejo, con muchas opciones para configurar el acceso mediante políticas. Puede obtener información detallada sobre las políticas disponibles en las páginas manuales que proporciona el paquete selinux-policy-doc. Esta tarea le muestra cómo acceder a esta información.

La documentación de políticas también contiene información sobre usuarios y roles. Por ejemplo, puede leer más sobre el usuario user_u sin privilegios de SELinux y el rol user_r en la página del manual user_selinux(8). La documentación de la política describe las restricciones que se aplican a diferentes contextos de seguridad y las opciones booleanas disponibles para personalizar la política de un entorno.

  1. Instale el paquete:
    sudo dnf install -y selinux-policy-doc
  2. Actualice la base de datos de páginas manuales:
    sudo mandb
  3. Examine las páginas del manual de políticas de SELinux. Para obtener una lista completa de toda la documentación manual de SELinux, ejecute:
    man -k _selinux