Product SiteDocumentation Site

5.4. Habilitando y Deshabilitando SELinux

Use los comandos /usr/sbin/getenforce o /usr/sbin/sestatus para chequear el estado de SELinux. El comando getenforce devuelve Obediente, Permisivo, o Deshabilitado. El comando getenforce devuelve Obediente cuando SELinux está habilitado (las reglas de la política de SELinux son aplicadas):
$ /usr/sbin/getenforce
Enforcing
El comando getenforce devuelve Permissive cuando SELinux está activado, pero las reglas de políticas de SELinux no están en obligatorio, y sólo se usan las reglas DAC. El comando getenforce devuelve Disabled si SELinux está deshabilitado.
El comando sestatus devuelve el estado de SELinux y la política de SELinux que se está usando:
$ /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted
SELinux status: enabled is returned when SELinux is enabled. Current mode: enforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is returned when the SELinux targeted policy is used.

5.4.1. Habilitando SELinux

En sistemas con SELinux deshabilitado, la opción SELINUX=disabled se configura en /etc/selinux/config:
# 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=disabled
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted
También, el comando getenforce devuelve Disabled:
$ /usr/sbin/getenforce
Disabled
Para habilitar SELinux:
  1. Use los comandos rpm -qa | grep selinux, rpm -q policycoreutils y rpm -qa | grep setroubleshoot para confirmar que los paquetes de SELinux están instalados. esta guía asume que los siguientes paquetes están instalados: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Si estos paquetes no están instalados, como usuario root de Linux, debe instalarlos con el comando yum install nombre-de-paquete. Los siguientes paquetes son opcionales: policycoreutils-gui, setroubleshoot, selinux-policy-devel y mcstrans.
    Después de instalar el paquete setroubleshoot-server, use el comando /sbin/chkconfig --list setroubleshoot para confirmar que setroubleshootd se inicia cuando el sistema corre en el nivel de ejecución [10] 3, 4, y 5:
    $ /sbin/chkconfig --list setroubleshoot
    setroubleshoot  0:off   1:off   2:off   3:on    4:on    5:on    6:off
    
    Si la salida difiere, como usuario root de Linux ejecute el comando /sbin/chkconfig --levels 345 setroubleshoot on. Esto hace que setroubleshootd se inicie automáticamente cuando el sistema esté en los niveles de ejecución 3, 4 y 5.
  2. Antes de activar SELinux, cada archivo en el sistema de archivo debe ser etiquetado con un contexto de SELinux. Antes que esto ocurra, los dominios confinados pueden tener el acceso denegado, impidiendo de que su sistema se inicie correctamente. Para prevenir esto, configure SELINUX=permissive en /etc/selinux/config:
    # 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
    
  3. Como usuario root de Linux, corra el comando reboot para reiniciar el sistema. Durante el siguiente arranque, los sistemas de archivo son etiquetados. El proceso etiqueta todos los archivos con un contexto de SELinux:
    *** Warning -- SELinux targeted policy relabel is required.
    *** Relabeling could take a very long time, depending on file
    *** system size and speed of hard drives.
    ****
    
    Cada carácter * en la línea de abajo representa 1000 archivos que han sido etiquetados. En el ejemplo de arriba, cuatro caracteres * representan 4000 archivos etiquetados. El tiempo que toma reetiquetar todos los archivos depende del número de archivos del sistema, y la velocidad de los discos rígidos. En sistemas modernos, este proceso puede tomar 10 minutos.
  4. En modo permisivo, la política de SELinux no es aplicada, pero las negaciones se guardan para las acciones que hubieran sido negadas si estaba corriendo en modo obediente. Antes de cambiar a modo obediente, como usuario root de Linux, ejecute el comando grep "SELinux está negando" /var/log/messages como usuario root de Linux para confirmar que SELinux no negó acciones durante la última reiniciada. Si SELinux no negó acciones durante el último arranque, este comando no devuelve nada. Vaya a Capítulo 7, Solución a Problemas para información para resolver problemas si SELinux negó el acceso durante el arranque.
  5. Si no hay mensajes de negación en /var/log/messages, configure SELINUX=enforcing en /etc/selinux/config:
    # 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
    
  6. Reinicie su sistema. Después de reiniciar, confirme que getenforce devuelve Enforcing:
    $ /usr/sbin/getenforce
    Enforcing
    
  7. Como usuario root de Linux, corra el comando /usr/sbin/semanage login -l para ver el mapeo entre usuarios de SELinux y de Linux. La salida debe ser como la siguiente:
    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
    
Si éste no es el caso, ejecute los siguientes comandos como usuario root de Linux para corregir los mapeos de usuario. Es seguro ignorar los mensajes El usuario SELinux nombre-de-usuario ya está definido si es que aparecen, donde nombre-de-usuario puede ser unconfined_u, guest_u, o xguest_u:
  1. /usr/sbin/semanage usuario -a -S targeted -P usuario -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
    
  2. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
    
  3. /usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 root
    
  4. /usr/sbin/semanage usuario -a -S targeted -P usuario -R guest_r guest_u
    
  5. /usr/sbin/semanage usuario -a -S targeted  -P usuario -R xguest_r xguest_u
    

Importante

Cuando los sistemas corren con SELinux en modo permisivo o deshabilitado, los usuarios tiene permiso para etiquetar los archivos incorrectamente. También, los archivos creados con SELinux deshabilitado no son etiquetados. Esto causa problemas cuando se cambia a modo obediente. Para prevenir el etiquetado incorrecto o la falta de etiquetado, los sistemas de archivos son automáticamente reetiquetados cuando se cambie desde el modo deshabilitado al modo permisivo u obediente.


[10] Vaya a http://en.wikipedia.org/wiki/Runlevel para información sobre los niveles de ejecución.