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.
El siguiente ejemplo muestra el cambio de tipo solamente en el contexto de SELinux:
Ejecute el comando cd
sin argumentos para cambiar a su directorio de inicio.
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.
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
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.
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/
):
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
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
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.