Introducción y conceptos fundamentales
En sistemas Linux con directivas de seguridad reforzadas mediante SELinux, la herramienta de terminal chcon (change context) resulta indispensable para modificar en caliente los contextos de seguridad asignados a ficheros y directorios. En este tutorial examinaremos cuatro patrones prácticos para administrar estos descriptores, detallando además los aspectos críticos sobre la volatilidad de los cambios frente a reinicios y tareas de reetiquetado del sistema.
Comprobación de contextos SELinux y sintaxis básica de chcon
Para experimentar con seguridad sin comprometer otras rutas del sistema operativo, creamos un directorio de trabajo aislado y accedemos a él mediante mkdir -p /tmp/chcon_lab && cd /tmp/chcon_lab.

A continuación, creamos un archivo HTML de muestra para verificar y modificar sus atributos de seguridad ejecutando touch web_sample.html.

Para inspeccionar la etiqueta de seguridad asignada actualmente al elemento, ejecutamos ls -Z web_sample.html.
La aparición de un signo ? en la respuesta de la terminal señala que SELinux se encuentra inactivo (Disabled) en el sistema o que el sistema de archivos carece de metadatos de contexto asignados.
El formato elemental para alterar el contexto de seguridad mediante chcon sigue la estructura chcon [opciones] contexto archivo.
⚙️ [Parámetros principales]
-t : Modifica el tipo (Type), componente central para las directivas de acceso en SELinux.-u : Actualiza la identidad de usuario (User) asociada al objeto.-r : Cambia el rol (Role) asignado según el esquema RBAC de SELinux.-R : Aplica las modificaciones de forma recursiva a través de toda la estructura de directorios.--reference : Replica íntegramente las etiquetas de seguridad a partir de un fichero de referencia.-v : Genera una salida detallada (verbose) describiendo cada acción realizada en pantalla.

Modificación selectiva del tipo de contexto (-t) en la práctica
Para reproducir la configuración de un servicio web típico, generamos la carpeta de trabajo y un documento inicial ejecutando mkdir -p /tmp/chcon_lab && touch /tmp/chcon_lab/index.html.

Con el fin de autorizar al servicio web el acceso de lectura al contenido, ajustamos su etiqueta asignando el tipo httpd_sys_content_t mediante la orden chcon -t httpd_sys_content_t /tmp/chcon_lab/index.html.

Confirmamos las nuevas propiedades de seguridad del documento ejecutando ls -Z /tmp/chcon_lab/index.html.
El símbolo ? reflejado en la salida indica que el subsistema SELinux continúa inactivo en la máquina, impidiendo que el núcleo registre dinámicamente la nueva información de contexto.

Duplicación con –reference y propagación recursiva con -R
Para evaluar la propagación de contextos en estructuras jerárquicas, creamos un árbol de carpetas con una hoja de estilo mediante mkdir -p /tmp/chcon_lab/public_html && touch /tmp/chcon_lab/public_html/style.css.

Generamos además una página web adicional que funcionará como destino para la copia de atributos mediante touch /tmp/chcon_lab/target_page.html.

Al ejecutar chcon --reference=/tmp/chcon_lab/index.html /tmp/chcon_lab/target_page.html, transferimos de manera íntegra el contexto de seguridad configurado en index.html hacia target_page.html.
Recurrir a --reference evita tener que introducir manualmente cadenas de contexto extensas y complejas, adoptando con total fiabilidad los parámetros de un elemento que ya funciona correctamente.

Si se necesita actualizar por completo un árbol de directorios de una sola vez, ejecutamos chcon -R -t httpd_sys_content_t /tmp/chcon_lab/public_html, asociando el tipo httpd_sys_content_t tanto a la carpeta raíz como a todos sus elementos internos.
La opción -R garantiza que la asignación descienda de forma automática a través de todos los niveles del árbol de archivos.

Examinamos en detalle el estado de los descriptores de seguridad en el directorio invocando ls -laZ /tmp/chcon_lab/public_html.
La presencia del caracter ? confirma nuevamente que SELinux permanece desactivado en el sistema operativo, de modo que las etiquetas no se computan.

Limitaciones esenciales y consideraciones sobre la volatilidad de chcon
Para contar con herramientas de recuperación y auditoría como restorecon, desplegamos los paquetes de utilidades esenciales ejecutando apt-get update -qq && apt-get install -y policycoreutils.

Generamos un archivo de prueba para comprobar la reversión de directivas mediante la instrucción touch /tmp/chcon_lab/warning_test.txt.

Asignamos temporalmente el tipo tmp_t al archivo utilizando chcon -t tmp_t /tmp/chcon_lab/warning_test.txt.
Conviene recordar que cualquier modificación efectuada con chcon es puramente transitoria y no se registra de manera persistente en la política global del sistema.

Comprobamos si el nuevo descriptor de seguridad ha quedado asociado emitiendo ls -Z /tmp/chcon_lab/warning_test.txt.
El símbolo ? reitera que el motor SELinux se encuentra desactivado (Disabled) y no computa las etiquetas asignadas.

Procedemos a restablecer la etiqueta original según las directivas predeterminadas del sistema ejecutando restorecon -v /tmp/chcon_lab/warning_test.txt.
Dado que cualquier ejecución de restorecon o proceso de reetiquetado global (autorelabel) revierte los cambios manuales hechos con chcon devolviéndolos a su valor de fábrica, para aplicar configuraciones definitivas y persistentes en el tiempo es imprescindible recurrir a semanage fcontext.

Revisamos el estado final del fichero tras intentar la restauración mediante ls -Z /tmp/chcon_lab/warning_test.txt.
La salida con el símbolo ? refleja que el sistema continúa operando sin directivas activas de SELinux.

Dominar el funcionamiento de chcon permite solucionar bloqueos y realizar ajustes rápidos en entornos de pruebas, pero entender su carácter efímero frente a directivas persistentes es clave para mantener la estabilidad de sistemas de producción.