Product SiteDocumentation Site

5.7.2. Cambios Persistentes: semanage fcontext

El comando /usr/sbin/semanage fcontext cambia el contexto SELinux de los archivos. Cuando se usa la política destinada, los cambios hechos con este comando se agregan al archivo /etc/selinux/targeted/contexts/files/file_contexts si los cambios so para archivos que están en file_contexts, se agregan a file_contexts.local para archivos nuevos y directorios, como sería al crear un directorio /web/ nuevo. setfiles, que se usa cuando el sistema de archivo es reetiquetado, y /sbin/restorecon, que restaura los contextos de SELinux predeterminados, leen estos archivos, Lo que significa que los cambios hechos por /usr/sbin/semanage fcontext son persistentes, aún si el sistema de archivo es reetiquetado. La política de SELinux controla si los usuarios pueden modificar el contexto de SELinux para cualquier archivo dado.
Referencia Rápida
Para hacer que los cambios de contexto de SELinux sobrevivan un reetiquetado del sistema de archivo:
  1. Ejecute el comando /usr/sbin/semanage fcontext -a opciones nombre-de-archivo|nombre-de-directorio, recuerde usar la dirección completa del archivo o del directorio.
  2. Ejecute el comando /sbin/restorecon -v nombre-de-archivo|nombre-de-directorio para aplicar los cambios de contexto.
Changing a File's Type
The following example demonstrates changing a file's type, and no other attributes of the SELinux context:
  1. Como usuario root de Linux, ejecute el comando touch /etc/archivo1 para crear un archivo nuevo. Por defecto, los archivos recién creados en el directorio /etc/ se etiquetan con el tipo etc_t:
    # ls -Z /etc/file1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0       /etc/file1
    
    
  2. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1 para cambiar el tipo del archivo1 a samba_share_t. La opción -a agrega un registro nuevo, y la opción -t define un tipo (samba_share_t). Nota: al ejecutar este comando no se cambia directamente el tipo - el archivo1 todavía es del tipo etc_t:
    # /usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1
    # ls -Z /etc/file1
    -rw-r--r--  root root unconfined_u:object_r:etc_t:s0       /etc/file1
    
    
    El comando /usr/sbin/semanage fcontext -a -t samba_share_t /etc/archivo1 agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /etc/file1    unconfined_u:object_r:samba_share_t:s0
    
    
  3. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /etc/archivo1 para cambiar el tipo. Dado que el comando semanage agregó una entrada a file.contexts.local para /etc/archivo1, el comando /sbin/restorecon cambia el tipo a samba_share_t:
    # /sbin/restorecon -v /etc/file1
    restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
    
    
  4. Como usuario root de Linux, ejecute el comando rm -i /etc/archivo1 para borrar el archivo1.
  5. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d /etc/archivo1 para eliminar el contexto agregado para /etc/archivo1. Cuando el contexto se elimina, ejecutando restorecon cambia el tipo a etc_t, en vez de samba_share_t.
Changing a Directory's Type
The following example demonstrates creating a new directory and changing that directory's file type, to a type used by Apache HTTP Server:
  1. Como usuario root de LInux, ejecute el comando mkdir /web para crear un directorio nuevo. Este directorio se etiqueta con el tipo default_t:
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0 /web
    
    
    La opción -d de ls hace que ls liste la información de un directorio, en vez de su contenido, y la opción -Z hace que ls muestre el contexto de SELinux (en este ejemplo, unconfined_u:object_r:default_t:s0).
  2. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web para cambiar el tipo de /web/ a httpd_sys_content_t. La opción -a agrega un nuevo registro, y la opción -t define un tipo (httpd_sys_content_t). Nota: la ejecución de este comando no cambia el tipo directamente - /web/ todavía tiene la etiqueta de tipo default_t:
    # /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web
    # ls -dZ /web
    drwxr-xr-x  root root unconfined_u:object_r:default_t:s0   /web
    
    
    El comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web agrega la siguiente entrada a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /web    unconfined_u:object_r:httpd_sys_content_t:s0
    
    
  3. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /web para cambiar el tipo. Como el comando semanage agregó una entrada a file.contexts.local para /web, el comando /sbin/restorecon cambia el tipo a httpd_sys_content_t:
    # /sbin/restorecon -v /web
    restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    
    
    Por defecto, los archivos y directorios recién creados heredan el tipo SELinux de sus carpetas padres. Cuando se usó este ejemplo, y antes de eliminar el contexto SELinux agregado para /web/, los archivos y directorios creados en el directorio /web/ fueron etiquetados con el tipo httpd_sys_content_t.
  4. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d /web para borrar el contexto agregado para /web/.
  5. Como usuario root de Linux, ejecute el comando /sbin/restorecon -v /web para restaurar el contexto predeterminado de SELinux.
Cambio de un Directorio y sus Tipos de Contenidos
The following example demonstrates creating a new directory, and changing the directory's file type (along with its contents) to a type used by Apache HTTP Server. The configuration in this example is used if you want Apache HTTP Server to use a different document root (instead of /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 file1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file3
    
    
  2. As the Linux root user, run the /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" command to change the type of the /web/ directory and the files in it, to httpd_sys_content_t. The -a option adds a new record, and the -t option defines a type (httpd_sys_content_t). The "/web(/.*)?" regular expression causes the semanage command to apply changes to the /web/ directory, as well as the files in it. Note: running this command does not directly change the type - /web/ and files in it are still labeled with the default_t type:
    # 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 file1
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file2
    -rw-r--r--  root root unconfined_u:object_r:default_t:s0 file3
    
    
    The /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" command adds the following entry to /etc/selinux/targeted/contexts/files/file_contexts.local:
    /web(/.*)?    system_u:object_r:httpd_sys_content_t:s0
    
    
  3. Como usuario root de LInux, ejecute el comando /sbin/restorecon -R -v /web para cambiar elt ipo del directorio /web/, junto con los archivos dentro de él. La opción -R significa recursivo, es decir, todos los archivos y directorios dentro del directorio /web/ se etiquetarán con el tipo httpd_sys_content_t. Dado que el comando semanage agregó una entrada en file.contexts.local para /web(/.*)?, el comando /sbin/restorecon los tipos a httpd_sys_content_t:
    # /sbin/restorecon -R -v /web
    restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
    
    
    Por defecto, los archivos y directorios recién creados heredan el tipo SELinux de sus padres. En este ejemplo, los archivos y directorios creado en el directorio /web/ se etiquetarán con el tipo httpd_sys_content_t.
  4. As the Linux root user, run the /usr/sbin/semanage fcontext -d "/web(/.*)?" command to remove the context added for "/web(/.*)?".
  5. Como usuario root de Linux, ejecute el comando /sbin/restorecon -R -v /web para restaurar el contexto predeterminado de SELinux.
Borrado de un Contexto agregado
El siguiente ejemplo muestra el agregado y su eliminación del contexto de SELinux:
  1. Como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /prueba. El directorio /prueba/ no tiene que existir. Este comando agrega el siguiente contexto a /etc/selinux/targeted/contexts/files/file_contexts.local:
    /test    system_u:object_r:httpd_sys_content_t:s0
    
    
  2. Para eliminar el contexto, como usuario root de Linux, ejecute el comando /usr/sbin/semanage fcontext -d nombre-de-archivo|nombre-de-directorio, donde nombre-de-archivo|nombre-de-directorio es la primera parte en file_contexts.local. El siguiente es un ejemplo de un contexto en file_contexts.local:
    /test    system_u:object_r:httpd_sys_content_t:s0
    
    
    Siendo la primera parte /prueba. Para evitar que el directorio /prueba/ se etiquete con httpd_sys_content_t después de ejecutar /sbin/restorecon, o después de un reetiquetado del sistema, ejecute el siguiente comando como usuario root de Linux para eliminar el contexto de file_contexts.local:
    /usr/sbin/semanage fcontext -d /test
Si el contexto es parte de una expresión regular, por ejemplo /web(/.*)?, use las comillas para encerrar la expresión regular:
/usr/sbin/semanage fcontext -d "/web(/.*)?"
Refer to the semanage(8) manual page for further information about /usr/sbin/semanage.

Importante

Cuando se cambia el contexto de SELinux con /usr/sbin/semanage fcontext -a, use la dirección completa del archivo o directorio para evitar etiquetar mal los archivos después de un reetiquetado del sistema de archivo, o después ejecutar el comando /sbin/restorecon.