Guía de chcon en Linux: Gestión de Contextos SELinux

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.

Inicialización del entorno de pruebas en /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.

Creación del fichero de prueba 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.

Inspección del contexto SELinux con ls -Z

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.

Preparación del directorio y del archivo 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.

Asignación del tipo httpd_sys_content_t

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.

Validación del contexto actualizado mediante ls -Z

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.

Estructuración del directorio public_html y archivo 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.

Creación del archivo destino 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.

Copia de contexto utilizando la opción –reference

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.

Aplicación recursiva de contextos con el parámetro -R

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.

Listado detallado del directorio con ls -laZ

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.

Instalación de herramientas de administración policycoreutils

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

Generación del archivo de prueba 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.

Modificación provisional del contexto con chcon -t

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.

Revisión del contexto modificado con ls -Z

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.

Restauración de contextos por defecto con restorecon -v

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.

Comprobación final tras restorecon con ls -Z

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.