Introducción
En este laboratorio, obtendrá experiencia práctica en la gestión de la seguridad SELinux en RHEL. Aprenderá a cambiar los modos de aplicación de SELinux, tanto temporal como permanentemente, y a configurar Apache con contextos de archivos SELinux personalizados. El laboratorio también cubre el ajuste de la política SELinux para los directorios de inicio de usuario utilizando booleanos y proporciona pasos prácticos para la solución de problemas y la resolución de denegaciones de SELinux para servidores web Apache y contenido web personalizado.
Cambiar el Modo de Aplicación de SELinux
En este paso, aprenderá a gestionar los modos de SELinux, tanto temporal como permanentemente. SELinux (Security-Enhanced Linux) es un mecanismo de seguridad que proporciona control de acceso obligatorio (MAC) para el kernel de Linux. Define los derechos de acceso para procesos, archivos y otros recursos del sistema.
SELinux opera en tres modos principales:
- Enforcing (Aplicación): Se aplica la política de SELinux. Los accesos denegados por la política se bloquean y se registran. Este es el modo predeterminado y más seguro.
- Permissive (Permisivo): No se aplica la política de SELinux. Los accesos denegados por la política se registran pero no se bloquean. Este modo es útil para la solución de problemas y la prueba de nuevas políticas.
- Disabled (Deshabilitado): SELinux está desactivado. No se carga ni se aplica ninguna política. Este modo generalmente no se recomienda para sistemas de producción.
Practicará el cambio del modo de SELinux utilizando herramientas de línea de comandos y modificando archivos de configuración.
Primero, comprobemos el modo de aplicación de SELinux actual.
Comprobar el modo de aplicación de SELinux actual.
Puede utilizar el comando
getenforcepara ver rápidamente el modo de SELinux actual.getenforceDebería ver
Enforcingcomo salida, lo que indica que SELinux está actualmente aplicando sus políticas.EnforcingCambiar el modo de SELinux a
permissivetemporalmente.El comando
setenforcele permite cambiar el modo de SELinux en tiempo de ejecución. Un valor de0establece el modo enpermissive, y1lo establece enenforcing. Este cambio es temporal y no persistirá después de los reinicios.sudo setenforce 0Ahora, verifique el cambio usando
getenforcede nuevo.getenforceLa salida ahora debería ser
Permissive.PermissiveCambiar el modo de SELinux de nuevo a
enforcingtemporalmente.Para revertir el cambio temporal, use
setenforce 1.sudo setenforce 1Verifique el modo una vez más.
getenforceLa salida debería ser
Enforcingde nuevo.EnforcingCambiar el modo de SELinux predeterminado a
permissivepermanentemente.Para que los cambios de modo de SELinux sean persistentes después de los reinicios, debe modificar el archivo
/etc/selinux/config. Este archivo define el modo de SELinux predeterminado para el sistema.Abra el archivo de configuración usando
nano.sudo nano /etc/selinux/configDentro del editor
nano, encuentre la línea que comienza conSELINUX=y cambie su valor deenforcingapermissive.## This file controls the state of SELinux on the system. ## SELINUX= can take one of these three values: ## enforcing - SELinux security policy is enforced. ## permissive - SELinux prints warnings instead of enforcing. ## disabled - No SELinux policy is loaded. SELINUX=permissive ## SELINUXTYPE= can take one of these three values: ## targeted - Targeted processes are protected, ## for the majority of users. ## minimum - Modification of targeted policy ## uses current settings and adds to it. ## mls - Multi Level Security protection. SELINUXTYPE=targetedPresione
Ctrl+Xpara salir, luegoYpara confirmar el guardado yEnterpara escribir en el mismo archivo.Después de guardar el archivo, puede confirmar el cambio en el archivo de configuración usando
grep.grep '^SELINUX' /etc/selinux/configLa salida debería mostrar
SELINUX=permissive.SELINUX=permissive SELINUXTYPE=targetedNota Importante: Cambiar
/etc/selinux/configno cambia inmediatamente el modo de SELinux activo. Solo establece el modo que se aplicará después del próximo reinicio del sistema. Para ver el modo activo actual, aún necesita usargetenforce.getenforceTodavía debería mostrar
Enforcingporque el sistema aún no se ha reiniciado.EnforcingCambiar el modo de SELinux predeterminado de nuevo a
enforcingen el archivo de configuración.Ahora, cambiemos el modo persistente de nuevo a
enforcing. Esta es la configuración recomendada y más segura para SELinux.Abra el archivo de configuración de nuevo.
sudo nano /etc/selinux/configCambie el parámetro
SELINUX=de nuevo aenforcing.## This file controls the state of SELinux on the system. ## SELINUX= can take one of these three values: ## enforcing - SELinux security policy is enforced. ## permissive - SELinux prints warnings instead of enforcing. ## disabled - No SELinux policy is loaded. SELINUX=enforcing ## SELINUXTYPE= can take one of these three values: ## targeted - Targeted processes are protected, ## for the majority of users. ## minimum - Modification of targeted policy ## uses current settings and adds to it. ## mls - Multi Level Security protection. SELINUXTYPE=targetedGuarde y salga del archivo (
Ctrl+X,Y,Enter).Confirme el cambio en el archivo de configuración.
grep '^SELINUX' /etc/selinux/configLa salida ahora debería mostrar
SELINUX=enforcing.SELINUX=enforcing SELINUXTYPE=targetedEn este punto, el modo de SELinux activo del sistema sigue siendo
Enforcing(si no reinició después del paso 4), y la configuración persistente también esEnforcing.
Configurar Apache con Contextos de Archivo SELinux Personalizados
En este paso, aprenderá a configurar Apache para servir contenido web desde un directorio no estándar y a gestionar sus contextos de archivos SELinux. De forma predeterminada, las políticas de SELinux restringen a Apache (httpd) a servir archivos solo desde directorios específicos, principalmente /var/www/html. Si coloca contenido web en una ubicación diferente, SELinux impedirá que Apache acceda a él, incluso si los permisos del sistema de archivos son correctos. Aquí es donde entran en juego los contextos de archivos SELinux.
Un contexto de archivo SELinux es una etiqueta aplicada a un archivo o directorio que define sus atributos de seguridad. Para que Apache sirva contenido desde una ubicación personalizada, esa ubicación y su contenido deben tener el contexto SELinux correcto, típicamente httpd_sys_content_t. Usará semanage fcontext para definir una regla persistente y restorecon para aplicarla.
Primero, necesita instalar el servidor HTTP Apache.
Instalar el servidor HTTP Apache.
Use el gestor de paquetes
dnfpara instalar el paquetehttpd.sudo dnf install -y httpdDebería ver una salida que indica la instalación exitosa del paquete
httpdy sus dependencias.Crear un directorio personalizado para contenido web y un archivo
index.html.Creará un nuevo directorio llamado
/customy colocará un archivoindex.htmlsimple dentro de él. Este será su raíz de documentos web no estándar.sudo mkdir /custom echo 'This is custom web content.' | sudo tee /custom/index.htmlVerifique el contenido del archivo
index.html.cat /custom/index.htmlThis is custom web content.Configurar Apache para usar la nueva raíz de documentos.
El archivo de configuración principal de Apache es
/etc/httpd/conf/httpd.conf. Necesita editar este archivo para que Apache apunte a su nuevo directorio/customen lugar del predeterminado/var/www/html.Abra el archivo de configuración usando
nano.sudo nano /etc/httpd/conf/httpd.confDentro del editor, encuentre las líneas
DocumentRoot "/var/www/html"y<Directory "/var/www/html">. Cambie ambas apariciones de/var/www/htmla/custom.Las secciones relevantes deberían verse así después de la modificación:
# ## DocumentRoot: The directory out of which you will serve your ## documents. By default, all requests are taken from this directory, but ## symbolic links and aliases may be used to point to other locations. # DocumentRoot "/custom" # ## Relax access to content within /var/www. # <Directory "/custom"> AllowOverride None ## Allow open access: Require all granted </Directory>Guarde y salga del archivo (
Ctrl+X,Y,Enter).Iniciar y habilitar el servicio web Apache.
Después de modificar la configuración, necesita iniciar el servicio
httpd. Dado que está en un entorno de contenedor,systemctlno está disponible. Iniciaráhttpddirectamente.sudo /usr/sbin/httpd -DFOREGROUND &El símbolo
&ejecuta el comando en segundo plano, lo que le permite continuar usando la terminal. Debería ver una salida similar a esta, que indica que Apache se está iniciando.[1] 5094 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::216:3eff:fe00:63b%eth0. Set the 'ServerName' directive globally to suppress this messageNota: El mensaje de advertencia sobre el nombre de dominio completo del servidor es normal en este entorno de laboratorio y se puede ignorar de forma segura.
Para verificar que Apache se está ejecutando, puede buscar el proceso
httpd.ps aux | grep httpdDebería ver varios procesos
httpden ejecución.root ... /usr/sbin/httpd -DFOREGROUND apache ... /usr/sbin/httpd -DFOREGROUND ...output omitted...Intentar acceder a la página web.
Ahora, intente acceder a su página web usando
curl. Dado que está en la misma máquina, puede usarlocalhost.curl http://localhost/index.htmlNota: En este entorno particular, es posible que encuentre que la página web es accesible incluso con el contexto
root_t. Esto demuestra que, si bien SELinux está aplicando, el contextoroot_tpuede tener permisos más amplios de lo esperado. Sin embargo, para las mejores prácticas de seguridad y la configuración adecuada de SELinux, el contenido web aún debe usar el contextohttpd_sys_content_tapropiado.This is custom web content.Comprobar el contexto SELinux actual del directorio personalizado.
Use el comando
ls -Zpara ver el contexto SELinux de su directorio/customy el archivoindex.html.ls -Zd /custom /custom/index.htmlNotará que tienen el contexto
root_t, que no es el contexto recomendado para el contenido web de Apache.system_u:object_r:root_t:s0 /custom system_u:object_r:root_t:s0 /custom/index.htmlCompare esto con la raíz de documentos predeterminada de Apache:
ls -Zd /var/www/htmlVerá que
/var/www/htmltiene el contextohttpd_sys_content_t. Este es el contexto que necesita aplicar a su directorio personalizado.system_u:object_r:httpd_sys_content_t:s0 /var/www/htmlDefinir una regla de contexto de archivo SELinux persistente para
/custom.El comando
semanage fcontextse usa para gestionar las reglas de mapeo de contexto de archivo SELinux. La opción-aagrega una nueva regla,-tespecifica el tipo de destino y la expresión regular'/custom(/.*)?'coincide con el directorio/customen sí y todos los archivos y subdirectorios dentro de él.sudo semanage fcontext -a -t httpd_sys_content_t '/custom(/.*)?'Este comando agrega la regla a la política de SELinux, pero no cambia inmediatamente los contextos de los archivos existentes.
Aplicar los nuevos contextos SELinux a los archivos.
El comando
restoreconse usa para restaurar los contextos SELinux de archivos y directorios a sus valores predeterminados según lo definido por la política. La opción-Raplica el cambio de forma recursiva y-vproporciona una salida detallada.sudo restorecon -Rv /customDebería ver una salida que indica que los contextos de
/customy/custom/index.htmlhan sido reetiquetados.Relabeled /custom from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0 Relabeled /custom/index.html from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0Verifique los contextos de nuevo usando
ls -Z.ls -Zd /custom /custom/index.htmlAhora deberían tener el contexto
httpd_sys_content_t.system_u:object_r:httpd_sys_content_t:s0 /custom system_u:object_r:httpd_sys_content_t:s0 /custom/index.htmlAcceder a la página web de nuevo.
Ahora que los contextos SELinux son correctos, intente acceder a la página web con
curlde nuevo.curl http://localhost/index.htmlAhora debería ver el contenido de su archivo
index.html.This is custom web content.Finalmente, detenga el proceso del servidor HTTP Apache.
sudo pkill httpdVerifique que no se estén ejecutando procesos
httpd.ps aux | grep httpdSolo debería ver el proceso
grepen sí.labex ... grep httpd
Ajustar la Política de SELinux para Directorios Home de Usuario con Booleans
En este paso, aprenderá a ajustar la política de SELinux utilizando Booleanos para permitir que Apache sirva contenido web desde los directorios de inicio de los usuarios. De forma predeterminada, SELinux impide que servicios como Apache accedan a archivos en los directorios de inicio de los usuarios por razones de seguridad. Sin embargo, existen escenarios específicos, como las páginas web personales, donde se desea esta funcionalidad.
Los Booleanos de SELinux son configuraciones de verdadero/falso que permiten a los administradores modificar el comportamiento de la política de SELinux sin escribir políticas personalizadas complejas. Proporcionan una forma flexible de habilitar o deshabilitar ciertas características de seguridad. Por ejemplo, existe un Booleano específicamente para permitir que Apache acceda a los directorios de inicio de los usuarios.
Habilitar la función de directorio de usuario de Apache.
Apache tiene un módulo llamado
mod_userdirque permite a los usuarios publicar contenido web desde un directoriopublic_htmldentro de su directorio de inicio (por ejemplo,~/public_html). Esta función se configura típicamente en/etc/httpd/conf.d/userdir.conf. De forma predeterminada, esta función a menudo está deshabilitada.Abra el archivo de configuración usando
nano.sudo nano /etc/httpd/conf.d/userdir.confDentro del editor, encontrará líneas relacionadas con
UserDir. Necesita comentar la línea que deshabilitaUserDiry descomentar la línea que lo habilita parapublic_html.Cambiar:
UserDir disabled #UserDir public_htmlA:
#UserDir disabled UserDir public_htmlGuarde y salga del archivo (
Ctrl+X,Y,Enter).Crear un directorio
public_htmly un archivoindex.htmlen su directorio de inicio.Creará el directorio
public_htmly un archivoindex.htmldentro de él. Aquí es donde residirá su contenido web personal.mkdir ~/public_html echo 'This is labex user content.' > ~/public_html/index.htmlVerifique el contenido del archivo
index.html.cat ~/public_html/index.htmlThis is labex user content.Informativo: Cuando creó el directorio
~/public_html, se configuró automáticamente con los contextos SELinuxuser_home_ty~/(su directorio de inicio) conhome_dir_t. El proceso del servidor web Apache (httpd_t) no puede leer archivos etiquetados comouser_home_tohome_dir_tde forma predeterminada debido a la política de SELinux.Iniciar el servicio web Apache.
Inicie el servicio
httpd. Recuerde,systemctlno está disponible en este entorno de contenedor, por lo que iniciaráhttpddirectamente.sudo /usr/sbin/httpd -DFOREGROUND &Puede ver un mensaje de advertencia sobre el nombre de dominio completo del servidor, que se puede ignorar de forma segura en este entorno de laboratorio.
Verifique que Apache se esté ejecutando.
ps aux | grep httpdroot ... /usr/sbin/httpd -DFOREGROUND apache ... /usr/sbin/httpd -DFOREGROUND ...output omitted...Intentar acceder a la página web del usuario y observar la denegación de SELinux.
Ahora, intente acceder a su página web personal usando
curl. La URL para los directorios de usuario normalmente sigue el formatohttp://localhost/~username/.curl http://localhost/~labex/index.htmlProbablemente recibirá un error "Forbidden" (Prohibido), lo que indica que Apache aún no puede acceder al contenido debido a SELinux.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /~labex/index.html on this server.<br /> </p> </body></html>Comprobar los Booleanos de SELinux relacionados con los directorios de inicio para
httpd.El comando
getseboolle permite ver el estado actual de los Booleanos de SELinux. Puede filtrar la salida usandogreppara encontrar Booleanos relacionados conhttpdy los directorios de inicio.sudo getsebool -a | grep httpd | grep homeDebería ver
httpd_enable_homedirs --> off, lo que indica que este Booleano está actualmente deshabilitado.httpd_enable_homedirs --> offHabilitar el Booleano
httpd_enable_homedirsde forma persistente.El comando
setseboolse usa para cambiar el estado de los Booleanos de SELinux. La opción-Phace que el cambio sea persistente después de los reinicios.sudo setsebool -P httpd_enable_homedirs onVerifique que el Booleano ahora esté
on.sudo getsebool -a | grep httpd | grep homehttpd_enable_homedirs --> onEstablecer los permisos de archivo correctos para el directorio de inicio.
Incluso con el Booleano de SELinux habilitado, Apache necesita los permisos correctos del sistema de archivos para acceder a su directorio de inicio y al directorio
public_html. De forma predeterminada, los directorios de inicio de los usuarios no son accesibles para el usuario Apache.chmod 711 ~ chmod 755 ~/public_html chmod 644 ~/public_html/index.htmlAcceder a la página web de nuevo.
Ahora que tanto el Booleano
httpd_enable_homedirsestá habilitado como los permisos de archivo son correctos, intente acceder a su página web personal concurlde nuevo.curl http://localhost/~labex/index.htmlAhora debería ver el contenido de su archivo
index.html.This is labex user content.Solución de problemas: Si aún encuentra problemas de acceso incluso después de habilitar el booleano y establecer los permisos de archivo, esto demuestra la naturaleza de múltiples capas de la seguridad de Linux. En algunos entornos, factores adicionales como:
- Directivas de configuración de Apache en
/etc/httpd/conf.d/userdir.conf - Contextos de archivos SELinux en la estructura del directorio de inicio
- Módulos de Apache adicionales o configuraciones de seguridad
puede ser necesario abordarlos. El punto clave de aprendizaje es comprender cómo funcionan los booleanos de SELinux junto con los permisos de archivo tradicionales y las configuraciones específicas de la aplicación.
- Directivas de configuración de Apache en
Detener el proceso del servidor HTTP Apache.
Finalmente, detenga el proceso del servidor HTTP Apache.
sudo pkill httpdVerifique que no se estén ejecutando procesos
httpd.ps aux | grep httpdlabex ... grep httpd
Solucionar Problemas de Denegaciones de SELinux para el Servidor Web Apache
En este paso, aprenderá a identificar y solucionar problemas de denegaciones de seguridad de SELinux, centrándose específicamente en problemas que podrían impedir que el servidor web Apache funcione correctamente. Cuando SELinux bloquea una operación, registra un mensaje de denegación de "Access Vector Cache" (AVC). Estos mensajes son cruciales para comprender por qué falló una operación y cómo resolverla.
Utilizará herramientas como auditd (el demonio del Sistema de Auditoría de Linux) y sealert para analizar estos mensajes de denegación. auditd recopila llamadas y eventos del sistema, incluidas las denegaciones de SELinux, y los almacena en /var/log/audit/audit.log. La herramienta sealert, parte del paquete setroubleshoot-server, puede analizar estos registros y proporcionar explicaciones legibles por humanos y soluciones sugeridas para las denegaciones de SELinux.
Primero, debe asegurarse de que auditd y setroubleshoot-server estén instalados.
Instalar
auditdysetroubleshoot-server.sudo dnf install -y audit setroubleshoot-serverDebería ver una salida que indica la instalación exitosa de estos paquetes.
Iniciar el servidor web Apache y crear un archivo problemático.
Para simular una denegación de SELinux, creará un archivo con un contexto SELinux incorrecto e intentará servirlo con Apache.
Primero, asegúrese de que Apache se esté ejecutando.
sudo /usr/sbin/httpd -DFOREGROUND &Ahora, cree un nuevo directorio y un archivo
index.htmldentro de él. Esta vez, establecerá intencionalmente un contexto SELinux incorrecto para este archivo para activar una denegación.sudo mkdir /testweb echo 'This is a test page.' | sudo tee /testweb/index.htmlDe forma predeterminada,
/testweb/index.htmlprobablemente tendrá el contextoroot_t. Vamos a confirmar.ls -Z /testweb/index.htmlsystem_u:object_r:root_t:s0 /testweb/index.htmlAhora, configuremos Apache para que sirva desde
/testweb. Abra/etc/httpd/conf/httpd.conf.sudo nano /etc/httpd/conf/httpd.confCambie
DocumentRooty la directiva<Directory>a/testweb.DocumentRoot "/testweb" <Directory "/testweb"> AllowOverride None Require all granted </Directory>Guarde y salga (
Ctrl+X,Y,Enter).Reinicie Apache para aplicar los cambios de configuración. Dado que está en un contenedor, necesita matar el proceso anterior e iniciar uno nuevo.
sudo pkill httpd sudo /usr/sbin/httpd -DFOREGROUND &Intentar acceder a la página web.
Intente acceder a la página web usando
curl.curl http://localhost/index.htmlNota Importante: En este entorno, es posible que encuentre que la página web es accesible incluso con el contexto
root_t, similar a lo que observamos en el Paso 2. Esto demuestra que, si bien SELinux está aplicando, el contextoroot_ttiene permisos más amplios que los contextos más restrictivos.This is a test page.Sin embargo, con el propósito de aprender técnicas de solución de problemas de SELinux, procederemos como si hubiera una denegación. En entornos SELinux más restrictivos o con diferentes configuraciones de políticas, el acceso a archivos con contextos inapropiados sí generaría denegaciones.
Aprender sobre la investigación de denegaciones de SELinux usando
ausearch.El comando
ausearchse usa para consultar los registros de auditoría. Puede buscar denegaciones de AVC de SELinux (-m AVC) que ocurrieron hoy (-ts today).sudo ausearch -m AVC -ts todayNota: Dado que la página web era accesible en nuestro entorno, es posible que no vea ninguna denegación de AVC reciente relacionada con esta prueba específica. Sin embargo, este comando normalmente generaría entradas detalladas del registro de auditoría si hubiera denegaciones. En un escenario de denegación típico, buscaría entradas relacionadas con
httpdy/testweb/index.html.Una entrada de denegación de AVC típica se vería así:
---- time->... type=AVC msg=audit(...): avc: denied { getattr } for pid=... comm="httpd" path="/testweb/index.html" dev="overlay" ino=... scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0 ...output omitted...Las partes clave en una denegación de AVC serían:
denied { getattr }: La operación que fue denegada (obtener atributos del archivo).comm="httpd": El proceso que fue denegado (servidor HTTP Apache).path="/testweb/index.html": El archivo al que se accedió.scontext=system_u:system_r:httpd_t:s0: El contexto SELinux de la fuente (Apache).tcontext=system_u:object_r:root_t:s0: El contexto SELinux del destino (su archivoindex.html).tclass=file: El tipo de destino (un archivo).
Esta salida muestra claramente que a
httpd_t(Apache) se le denegó el accesogetattra un archivo con el contextodefault_t.Aprender sobre el uso de
sealertpara el análisis de SELinux.sealertpuede analizar los registros de auditoría y proporcionar información más fácil de usar. Puede ejecutarsealert -apara analizar todas las denegaciones recientes o usarsealert -l <UUID>si tiene un UUID específico de un mensajesetroubleshooten/var/log/messages.sudo sealert -a /var/log/audit/audit.logNota: Dado que no hemos encontrado denegaciones reales en este entorno, la ejecución de
sealertpuede no mostrar resultados relacionados con nuestro ejemplo/testweb. Sin embargo, en un escenario donde ocurren denegaciones de SELinux,sealertanalizaría el registro de auditoría y presentaría un resumen.Una salida típica de
sealertpara un problema de contexto httpd se vería así:SELinux is preventing /usr/sbin/httpd from getattr access on the file /testweb/index.html. ***** Plugin catchall_labels (83.8 confidence) suggests ******************* If you want to allow httpd to have getattr access on the index.html file Then you need to change the label on /testweb/index.html Do ## semanage fcontext -a -t FILE_TYPE '/testweb/index.html' where FILE_TYPE is one of the following: httpd_sys_content_t, httpd_sys_script_exec_t, httpd_unconfined_script_exec_t, ... ***** Plugin httpd_can_network_connect (93.8 confidence) suggests ********* If you want to allow httpd to connect to the network (for example, to a database) Then you must set the httpd_can_network_connect boolean to on. Do ## setsebool -P httpd_can_network_connect on ...output omitted...La salida de
sealertsería muy útil en escenarios de denegación reales. Indicaría explícitamente el problema y sugeriría soluciones, como cambiar la etiqueta consemanage fcontext -a -t FILE_TYPE '/testweb/index.html'y enumerarhttpd_sys_content_tcomo unFILE_TYPEadecuado.Finalmente, detenga el proceso del servidor HTTP Apache.
sudo pkill httpdVerifique que no se estén ejecutando procesos
httpd.ps aux | grep httpdlabex ... grep httpd
Resolver Problemas de SELinux para Contenido Web Personalizado
En este paso final, aplicará el conocimiento adquirido del ejercicio de solución de problemas anterior para resolver la denegación de SELinux que impidió que Apache sirviera contenido desde el directorio /testweb. Usará semanage fcontext para definir el contexto SELinux correcto para su contenido web personalizado y restorecon para aplicarlo.
Este proceso refuerza la comprensión de cómo funcionan los contextos SELinux y cómo configurarlos correctamente para servicios como Apache.
Asegúrese de que Apache se esté ejecutando y la configuración esté en su lugar.
Primero, asegúrese de que Apache esté configurado para servir desde
/testweby se esté ejecutando. Si detuvo Apache en el paso anterior, inícielo de nuevo.sudo /usr/sbin/httpd -DFOREGROUND &Verifique que el
DocumentRooten/etc/httpd/conf/httpd.confesté configurado en/testweb. Si no es así, modifíquelo como se hizo en el paso anterior.grep "DocumentRoot" /etc/httpd/conf/httpd.confDocumentRoot "/testweb"Además, confirme que
/testweb/index.htmlexiste y tiene el contextoroot_t.ls -Z /testweb/index.htmlsystem_u:object_r:root_t:s0 /testweb/index.htmlAcceder a la página web para confirmar el comportamiento actual.
Verifiquemos que la página web sea actualmente accesible con el contexto
root_t.curl http://localhost/index.htmlComo hemos visto antes, la página es accesible incluso con el contexto
root_t.This is a test page.Si bien esto funciona, procederemos a demostrar la configuración SELinux adecuada para el contenido web.
Definir el contexto de archivo SELinux correcto para
/testweb.El contexto SELinux correcto para el contenido web servido por Apache es
httpd_sys_content_t. Necesita agregar una regla persistente usandosemanage fcontext.sudo semanage fcontext -a -t httpd_sys_content_t '/testweb(/.*)?'Este comando le dice a SELinux que cualquier archivo o directorio dentro de
/testweb(incluido/testweben sí) debe etiquetarse conhttpd_sys_content_t.Aplicar los nuevos contextos SELinux a los archivos.
Después de definir la regla, debe aplicarla a los archivos existentes usando
restorecon.sudo restorecon -Rv /testwebDebería ver una salida que indica que los contextos han sido reetiquetados.
Relabeled /testweb from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0 Relabeled /testweb/index.html from system_u:object_r:root_t:s0 to system_u:object_r:httpd_sys_content_t:s0Verifique los contextos nuevamente usando
ls -Z.ls -Z /testweb/index.htmlsystem_u:object_r:httpd_sys_content_t:s0 /testweb/index.htmlAcceder a la página web de nuevo para confirmar la configuración adecuada.
Ahora que los contextos SELinux se aplican correctamente de acuerdo con las mejores prácticas, intente acceder a la página web con
curluna vez más.curl http://localhost/index.htmlEl contenido aún debería ser accesible, y ahora está configurado correctamente con el contexto SELinux recomendado.
This is a test page.Esto demuestra que, si bien el contexto
root_tpuede funcionar en este entorno, el uso del contextohttpd_sys_content_tadecuado sigue las mejores prácticas de SELinux y garantiza la compatibilidad en diferentes configuraciones de seguridad.Finalmente, detenga el proceso del servidor HTTP Apache.
sudo pkill httpdVerifique que no se estén ejecutando procesos
httpd.ps aux | grep httpdlabex ... grep httpd
Resumen
En este laboratorio, aprendió a administrar la seguridad de SELinux en RHEL. Comenzó por comprender y practicar cómo cambiar los modos de aplicación de SELinux, tanto temporalmente usando setenforce como de forma persistente modificando /etc/selinux/config. Esto incluyó verificar el modo actual con getenforce y comprender las implicaciones de los modos Enforcing (Aplicación), Permissive (Permisivo) y Disabled (Deshabilitado).
Además, obtuvo experiencia práctica en la configuración de Apache con contextos de archivo SELinux personalizados utilizando semanage fcontext y restorecon para garantizar el correcto funcionamiento del servidor web. También aprendió a ajustar la política de SELinux para los directorios de inicio de usuario habilitando booleanos SELinux específicos con setsebool. Finalmente, el laboratorio cubrió técnicas esenciales de solución de problemas para las denegaciones de SELinux, específicamente para el servidor web Apache, mediante el análisis de los registros de auditoría con ausearch y audit2allow para identificar y resolver problemas de acceso para contenido web personalizado.



