Product SiteDocumentation Site

5.7. Contextos de SELinux - Etiquetado de Archivos

En sistemas que corren SELinux, todos los procesos y archivos son etiquetados con una etiqueta que contiene información de seguridad relevante. Esta información se llama contexto de SELinux. Para archivos, esto se ve usando el comando ls -Z:
$ ls -Z archivo1
-rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
En este ejemplo, SELinux provee un usuario (unconfined_u), un rol (object_r), un tipo (user_home_t) y un nivel (s0). Esta información se usa para tomar decisiones sobre el control de acceso. En sistemas DAC, el control de acceso se basa en los IDs de usuario y grupo de Linux. Las reglas de la política de SELinux se chequean después de las reglas DAC. Las reglas de la política de SELinux no se usan si las reglas DAC niegan el acceso antes.
Hay muchos comandos para la administración del contexto de archivos de SELinux, como por ejemplo chcon, semanage fcontext, y restorecon.

5.7.1. Cambios Temporales: chcon

El comando chcon cambia el contexto SELinux de los archivos. Estos cambios no sobreviven un reetiquetado del sistema de archivo, o el comando /sbin/restorecon. La política de SELinux controla si los usuarios pueden modificar el contexto SELinux de algún archivo. Cuando se usa chcon, los usuarios proveen toda o parte del contexto SELinux a cambiar. Un tipo de archivo incorrecto es una causa común de negación de acceso de SELinux.
Referencia Rápida
  • Ejecute el comando chcon -t tipo nombre-de-archivo para cambiar el tipo de archivo, donde tipo es el tipo, por ejemplo httpd_sys_content_t, y nombre-de-archivo es un nombre de archivo o de directorio.
  • Ejecute el comando chcon -R -t tipo nombre-de-directorio para cambiar el tipo de un directorio y su contenido, donde tipo es el tipo, por ejemplo httpd_sys_content_t, y nombre-de-directorio es un nombre de directorio.
Cambiando el Tipo de un Archivo o de un Directorio
El siguiente ejemplo muestra el cambio de tipo solamente en el contexto de SELinux:
  1. Ejecute el comando cd sin argumentos para cambiar a su directorio de inicio.
  2. Ejecute el comando touch archivo1 para crear un archivo nuevo. Use el comando ls -Z archivo1 para ver el contexto de SELinux del archivo1:
    $ ls -Z archivo1
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:user_home_t:s0 archivo1
    
    En este ejemplo, el contexto SELinux del archivo1 incluye el usuario unconfined_u, el rol object_r, el tipo user_home_t, y el nivel s0. Para una descripción de cada parte del contexto SELinux, vaya a Capítulo 3, Contextos de SELinux.
  3. EJecute el comando chcon -t samba_share_t archivo1 para cambiar el tipo a samba_share_t. La opción -t sólo cambia el tipo. Vea el cambio con ls -Z archivo1:
    $ ls -Z archivo1 
    -rw-rw-r--  usuario1 grupo1 unconfined_u:object_r:samba_share_t:s0 archivo1
    
  4. Use el comando /sbin/restorecon -v archivo1 para restaurar el contexto de SELinux del archivo1. Use la opción -v para ver qué cambia:
    $ /sbin/restorecon -v archivo1
    restorecon reset archivo1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
    
    En este ejemplo, el tipo previo samba_share_t, se restaura al tipo correcto user_home_t. Cuando se usa la política destinada (la política SELinux predeterminada en Fedora 11), el comando /sbin/restorecon lee los archivos en el directorio /etc/selinux/targeted/contexts/files/ para ver qué contexto de SELinux deben tener los archivos.
El ejemplo en esta sección funciona igual para directorios, por ejemplo, si archivo1 fuera un directorio.
Cambio de un Directorio y sus Tipos de Contenidos
El siguiente ejemplo muestra la creación de un directorio nuevo y el cambio del tipo de archivo del mismo (junto con su contenido) a un tipo usado por el Servidor HTTP Apache. La configuración en este ejemplo se usa si quiere que el Servidor HTTP Apache use una raíz de documento distinta (en vez de /var/www/html/):
  1. Como usuario root de Linux, ejecute el comando mkdir /web para crear un directorio nuevo, y luego el comando touch /web/archivo{1,2,3} para crear 3 archivos vacíos (archivo1, archivo2 y archivo3). El directorio /web/ y los archivos en él son etiquetados con el tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    # ls -lZ /web
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 archivo3
    
  2. Como usuario root de Linux, corra el comando chcon -R -t httpd_sys_content_t /web/ para cambiar el tipo del directorio /web/ (y su contenido) a httpd_sys_content_t:
    # chcon -R -t httpd_sys_content_t /web/
    # ls -dZ /web/
    drwxr-xr-x  root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
    # ls -lZ /web/
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo1
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo2
    -rw-r--r--  root root unconfined_u:object_r:httpd_sys_content_t:s0 archivo3
    
  3. Como usuario root de Linux, corra el comando /sbin/restorecon -R -v /web/ para restaurar los contextos de SELinux predeterminados:
    # /sbin/restorecon -R -v /web/
    restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/archivo2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/archivo3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    restorecon reset /web/archivo1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
    
Vaya a la página del manual de chcon(1) para más información sobre chcon.

Nota

La Obligación de Tipo es el control de permisos principal usado en la política destinada de SELinux. Para la mayor parte, los usuarios y roles de SELinux se pueden ignorar.