Cambiar Estados y Modos de SELinux

El Equipo Documental de Fedora, Peter Boy (pboy) Version F36 and newer Last review: 2023-08-09

Cambios permanentes en estados y modos de SELinux

Como se explica en Introducción a SELinux, SELinux se puede habilitar o deshabilitar. Cuando está habilitado, SELinux tiene dos modos: forzado y permisivo.

Emplee las instrucciones getenforce o sestatus para marcar en cual modo SELinux está ejecutándose. La instrucción getenforce devuelve Enforcing, Permissive, o Disabled.

La instrucción sestatus devuelve el estado SELinux y la normativa SELinux que está siendo utilizada:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

Cuando los sistemas ejecutan SELinux en modo permisivo, los usuarios y procesos pueden etiquetar incorrectamente varios objetos del sistema de archivos. Los objetos del sistema de archivos creados con SELinux deshabilitado no se etiquetan. Este comportamiento causa problemas al cambiar al modo de aplicación, ya que SELinux depende de que los objetos del sistema de archivos estén etiquetados correctamente.

Para evitar que los archivos etiquetados incorrectamente o sin etiquetar causen problemas, los sistemas de archivos se re‐etiquetan automáticamente al cambiar del estado deshabilitado al modo permisivo o de aplicación. En el modo permisivo, use el comando fixfiles -F onboot como root para crear el archivo /.autorelabel con la opción -F para asegurar que los archivos se re‐etiqueten en el siguiente reinicio.

Habilitando SELinux

Cuando está habilitado, SELinux puede ejecutar en uno de estos dos modos: hacer cumplir o permisivo. Las siguientes secciones muestran como cambiar permanentemente entre estos modos.

Mientras habilita SELinux sobre sistemas que previamente lo tenían deshabilitado, para evitar problemas, como sistemas que sean incapaces de arrancar o fallos en procesos, siga este procedimiento.

Pre-requisitos
  • Están instalados los paquetes selinux-policy-targeted, selinux-policy, libselinux-utils y grubby. Para comprobar que un paquete concreto está instalado:

    $ rpm -q _package_name_
Procedimiento
  1. Si su sistema tiene SELinux deshabilitado a nivel de kernel (esta es la forma recomendada, consulte [_disabling_selinux]), cambie esto primero. Compruebe si tiene la opción selinux=0 en la línea de comandos de su kernel:

    $ cat /proc/cmdline
    BOOT_IMAGE=... ... selinux=0
    1. Quite la opción selinux=0 de la configuración del cargador de arranque usando grubby:

      $ sudo grubby --update-kernel ALL --remove-args selinux
    2. El cambio de aplica tras su reinicio del sistema en uno de los siguientes pasos.

  2. Asegure el sistema de archivos es re-etiquetado en el siguiente arranque:

    $ sudo fixfiles onboot
  3. Habilita SELinux en modo permisivo. Para más información, consulte [_changing_to_permissive_mode].

  4. Reinicie su sistema:

    $ sudo reboot
  5. Compruebe si hay mensajes de denegación de SELinux.

    $ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent
  6. Si no hay denegaciones, intercambie al modo de cumplimiento. Para más información, consulte [_changing_to_enforcing_mode].

Para ejecutar aplicaciones personales con SELinux en modo reforzado, elija uno de los siguientes escenarios:

Cambiando a modo permisivo

Utilice el siguiente procedimiento para cambiar permanentemente el modo SELinux a permisivo. Cuando SELinux se ejecuta en modo permisivo, la política de SELinux no se aplica. El sistema permanece operativo y SELinux no deniega ninguna operación, sino que solo registra los mensajes AVC, que pueden utilizarse para la resolución de problemas, la depuración y la mejora de las normativas de SELinux. En este caso, cada AVC se registra solo una vez.

Prerrequisitos
  • Los paquetes selinux-policy-targeted, libselinux-utils, y policycoreutils son instalados en su sistema.

  • Los parámetros de kernel selinux=0 o enforcing=0 no son utilizados.

Procedimiento
  1. Abra el archivo /etc/selinux/config en el editor de texto que prefiera, por ejemplo:

$ sudo vi /etc/selinux/config
  1. Configure la opción SELINUX=permissive:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted
  1. Rearranque el sistema:

    $ sudo reboot

Cambiar a modo forzado

Utilice los siguiente procedimiento para cambiar a SELinux a modo reforzado. Cuando SELinux esté ejecutándose en modo reforzado, refuerza la normativa de SELinux y deniega acceso basado en reglas de normativa de SELinux. En Fedora, el modo reforzado está habilitado por defecto cuando el sistema fue inicialmente instalado con SELinux.

Pre-requisitos
  • Los paquetes selinux-policy-targeted, libselinux-utils, y policycoreutils son instalados en su sistema.

  • Los parámetros de kernel selinux=0 o enforcing=0 no son utilizados.

Procedimiento
  1. Abra el archivo /etc/selinux/config en el editor de texto que prefiera, por ejemplo:

    $ sudo vi /etc/selinux/config
  2. Configure la opción SELINUX=enforcing:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
  3. Guarde los cambios, y rearranque el sistema:

    $ sudo reboot

    En el siguiente arranque, las etiquetas SELinux todas los archivos y directorios con el sistema y añada el contexto SELinux para archivos y directorios que fueron creados cuando SELinux fue inhabilitado.

Verificación
  1. Tras que el sistema reinicie, confirme que el comando getenforce devuelve Enforcing:

    $ getenforce
    Enforcing

Tras cambiar al modo de aplicación estricta, SELinux podría denegar algunas acciones debido a reglas de normativa de SELinux incorrectas o ausentes. Para ver qué acciones deniega SELinux, ejecute el siguiente comando como usuario root:

$ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

Alternativamente, con el setroubleshoot-server instalado, introduzca:

$ sudo grep "SELinux is preventing" /var/log/messages

Los usuarios estándar pueden utilizar el IGU setroubleshoot para los fallos directamente a Bugzilla.

Si está activo SELinux y la demonio Audit (auditd) no está ejecutándose en su sistema, encontrar busque ciertos mensajes de SELinux en la salida del comando dmesg:

$ sudo dmesg | grep -i -e type=1300 -e type=1400

Si SELinux deniega algunas acciones, consulte los capítulos de Soluciones de problemas relacionados con SELinux en el documento RHEL 8 Using SELinux para información acerca de soluciones.

Deshabilitar SELinux

Utilice el procedimiento siguiente para deshabilitar permanentemente SELinux.

Cuando SELinux está inhabilitada, la directiva de SELinux no se carga en absoluto; no se aplica y no se registran los mensajes AVC. Por lo tanto, se pierden todas las ventajas de ejecutar SELinux que se enumeran en Beneficios de SELinux.

Se recomienda usar el modo permisivo en lugar de deshabilitar SELinux de forma permanente. Consulte [_changing_to_permissive_mode] para obtener más información sobre el modo permisivo.

Deshabilitar SELinux usando la opción SELINUX=disabled en /etc/selinux/config lleva a un proceso en el cual el kernel arranca con SELinux habilitado y conmuta al modo deshabilitado más tarde en el proceso de arranque. Debido a que pueden ocurrir fallos de memoria y condiciones en la marcha que originen fallos en el kernel, es preferible deshabilitar SELinux añadiendo el parámetro selinux=0 en la línea de comandos del kernel como se describe en Cambiar los modos SELinux en el momento del arranque si su escenario requiere realmente deshabilitar completamente SELinux.

Pre-requisitos
  • El paquete grubby está instalado:

    $ rpm -q grubby
    grubby-_version_
Procedimiento
  1. Abra el archivo /etc/selinux/config en el editor de texto que prefiera, por ejemplo:

    $ sudo vi /etc/selinux/config
  2. Configura la opción SELINUX=disabled:

    # Este archivo controla el estado de SELinux en el sistema.
    # SELINUX= puede tomar uno de estos tres valores
    #       enforcing - Normativa de seguridad de SELinux está reforzada.
    #       permissive - SELinux declara avisos en vez de reforzar.
    #       disabled - Ninguna normativa de SELinux está cargada.
    SELINUX=disabled
    # SELINUXTYPE= puede tomar uno de estos dos valores
    #       targeted - Procesos apuntados están protegidos
    #       mls - Protección de Seguridad Multi Nivel.
    SELINUXTYPE=targeted
  3. Guarde el cambio, y rearranque su sistema:

$ sudo reboot
Verificación
  • Tras rearrancar, confirme que la instrucción getenforce devuelve Disabled:

    $ getenforce
    Disabled

Cambiadno Modos SELinux en Tiempo de Arranque

Al arrancar, puede poner varios parámetros del kernel para cambiar la manera de ejecutar SELinux:

enforcing=0

Al configurar este parámetro, el sistema se inicia en modo permisivo, lo cual resulta útil para solucionar incidencias. Usar el modo permisivo podría ser la única opción para detectar un problema si el sistema de archivos está demasiado corrupto. Además, en modo permisivo, el sistema continúa creando las etiquetas correctamente. Los mensajes AVC que se crean en este modo pueden ser diferentes a los del modo reforzado.

En el modo permisible, solo la primera denegación desde una serie de los mismos denegados es informado. Sin embargo, en modo refuerzo, quizá obtiene una denegación relacionada con lectura de un directorio, y una detención de aplicación. En modo permisivo, obtiene el mismo mensaje AVC, pero la aplicación continúa leyendo archivos en el directorio y obtiene un AVC para cada denegación en adición.

selinux=0

Este parámetro hace que el núcleo no cargue ninguna parte de la infraestructura SELinux. Los scripts de inicio detectan que el sistema se ha iniciado con el parámetro selinux=0 y modifican el archivo /.autorelabel. Esto hace que el sistema vuelva a etiquetar automáticamente la próxima vez que se inicie con SELinux habilitado.

Utilizar el parámetro selinux=0 no está recomendado. Para depurar su sistema, prefiera emplear modo permisivo.

autorelabel=1

Este parámetro fuerza el sistema para re-etiquetar similarmente a los comandos siguientes:

$ sudo touch /.autorelabel
$ sudo reboot

Si un archivo contiene una cantidad grande de objetos mal etiquetados, inicie el sistema en modo permisivo para crear el proceso de auto-reetiquetado.

Para obtener parámetros de arranque del kernel adicionales relacionados con SELinux, como checkreqprot, consulte el archivo kernel-parameters.txt. Este archivo está disponible en el paquete fuente de su kernel de Linux (.src.rpm). Para descargar el paquete fuente que contiene el kernel utilizado actualmente:

$ sudo dnf download --source kernel