México: (+52)5585908505, Atención: 9:00 a 18:00 hrs
Cursos y talleres en español de Internet de las Cosas   
   |   

Control de acceso SELinux

Control de acceso SELinux

Estas aquí:
<< Regresar

SELinux

Security-Enhanced Linux, mejor conocido como SELinux es un mecanismo de seguridad de control de acceso obligatorio ( MAC, por sus siglas en inglés Mandatory Access Control ) implementado en el kernel de Linux.

SELinux tiene tres modos básicos de funcionamiento, de los cuales Enforcing se establece como el modo por defecto de instalación. Hay, sin embargo, un calificador adicional targeted o mls que controlan la forma generalizada en que se aplican las reglas de SELinux, targeted es el nivel menos estricto.

  • Enforcing: El modo predeterminado que permitirá y hacer cumplir la política de seguridad de SELinux en el sistema, negando las acciones de acceso y registro
  • Permissive: En modo permisivo, SELinux está habilitado pero no hará cumplir la política de seguridad, sólo advertir y registrar las acciones. Modo permisivo es útil para temas de solución de problemas de SELinux
  • Disable: SELinux se desactiva

El modo de SELinux se puede ver y cambiar utilizando la herramienta de interfaz gráfica de usuario de gestión de SELinux disponibles en el menú de administración o desde la línea de comandos ejecutando ‘system-config-selinux’ (la herramienta GUI Gestión SELinux es parte del paquete policycoreutils-gui y no se instala por defecto).

Los usuarios que prefieren la línea de comandos puede utilizar el comando ‘sestatus’ para ver el estado actual de SELinux:

sestatus
SELinux status: enabled SELinuxfs
mount: /selinux Current mode: enforcing Mode from config
file: enforcing Policy version: 21 Policy from config
file: targeted

El archivo /etc/selinux/config es el archivo de configuración principal de SELinux. Controla el modode SELinux y la política de SELinux a usar:

# 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

SELINUX=enforcing

La opción SELINUX pone el modo en el que corre SELinux. SELinux tiene tres modos: obediente, permisivo y deshabilitado. Cuando se usa modo obediente, la política de SELinux es aplicada y SELinux niega el acceso basándose en las reglas de políticas de SELinux. Los mensajes de negación se guardan. Cuando se usa modo permisivo, la política de SELinux no es obediente. Los mensajes son guardados. SELinux no niega el acceso, pero se guardan las negaciones de acciones que hubieran sido negadas si SELinux estaba en modo obediente. Cuando se usa el modo deshabilitado, SELinux está deshabilitado (el módulo de SELinux no se registra con el kernel de Linux), y sólo se usan las reglas DAC.

SELINUXTYPE=targeted

La opción SELINUXTYPE pone la política SELinux a usar. La política Destinada es la predeterminada. Sólo cambie esta opción si quiere usar la política MLS. Para usar la política MLS, instale el paquete selinux-policy-mls; configure SELINUXTYPE=mls en /etc/selinux/config; y reinicie su sistema.

Habilitando y Deshabilitando SELinux

Use los comandos /usr/sbin/getenforce o /usr/sbin/sestatus para revisar 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 devuelve cuando SELinux está activado.
  • Current mode: enforcing devuelve cuando SELinux está siendo ejecutado en modo enforcing.
  • Policy from config file: targeted devuelve cuando SELinux targeted es empleado.

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 del paquete. Los siguientes paquetes son opcionales: policycoreutils-gui,setroubleshoot, selinux-policy-devel y mcstrans.
  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 SELINNUX=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 se cumple, pero negaciones todavía está en el sistema de acciones que se les ha negado si se ejecuta en modo impositivo.
  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 user -a -S targeted -P user -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 user -a -S targeted -P user -R guest_r guest_u
  5. /usr/sbin/semanage user -a -S targeted -P user -R xguest_r xguest_u

Mapeo de usuarios SELinux

Deshabilitando SELinux

Para deshabilitar SELinux, configure SELINUX=disabled 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

Reinicie su sistema. Después de reiniciar, confirme que getenforce devuelve Disabled:

/usr/sbin/getenforce
Disabled

Nota: SELinux está diseñado para mejorar las soluciones de seguridad existentes, no reemplazarlas.

Para visualizar los permisos de los archivos se usa el comando ls -Z, donde -Z se usa en distintos comandos para los permisos de SELinux (cp, mv, find, etc.) y los permisos se visualizan idénticamente al usar ls -l.

ls -l
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0:c0.c3      file1

De lo anterior se obtiene la siguiente información:

-rwxrw-r– Permisos del archivo en SELinux.
user1 Usuario al cual pertenece el archivo.
group1 Grupo asignado al archivo.
unconfined_u Usuario SELinux.
object_r Rol asignado en SELinux.
user_home_t Tipo de dominio en SELinux.
s0 Nivel MLS.
c0.c3 Las categorías a las que el usuario tiene acceso.
file1 Nombre del archivo.

Deja un comentario