Provocar una Denegación de SELinux al Mover un Archivo con un Contexto Incorrecto
En este paso, verás qué sucede cuando un archivo con un contexto SELinux incorrecto se mueve al directorio web de Apache. Este es un escenario común que puede resultar confuso si no se conoce cómo funcionan los contextos de SELinux con las operaciones de archivos como mv. A diferencia de crear un archivo directamente en un directorio (lo que hace que herede el contexto predeterminado del padre), mover un archivo preserva su contexto original.
Primero, vamos a crear una nueva página web, page2.html, en tu directorio de trabajo actual, ~/project.
echo "This is Page 2" > page2.html
Ahora, comprueba el contexto SELinux de este nuevo archivo. Dado que se creó en el directorio de proyecto de tu usuario, recibirá un contexto predeterminado asignado a los archivos de usuario.
ls -Z page2.html
La salida mostrará un tipo de contexto como user_home_t o algo similar, que es el predeterminado para los archivos en el directorio personal de un usuario.
system_u:object_r:user_home_t:s0 page2.html
Observa que el tipo es user_home_t. Esto es diferente de httpd_sys_content_t, que es al que Apache tiene permiso para acceder.
A continuación, mueve este archivo a la raíz web de Apache usando el comando mv. Necesitarás sudo porque el directorio de destino /var/www/html es propiedad de root.
sudo mv page2.html /var/www/html/
El comando mv preserva el contexto SELinux del archivo de origen. Verifiquemos esto comprobando el contexto del archivo en su nueva ubicación.
ls -Z /var/www/html/page2.html
Como puedes ver, el contexto no ha cambiado. Sigue siendo user_home_t, a pesar de que el archivo se encuentra ahora en el directorio /var/www/html.
system_u:object_r:user_home_t:s0 /var/www/html/page2.html
Ahora, intenta acceder a esta nueva página usando curl. SELinux bloqueará el acceso debido a la discrepancia de contexto.
curl http://localhost/page2.html
Recibirás un error "403 Forbidden" del servidor. No se trata de un problema tradicional de permisos de archivo; es SELinux aplicando su política de seguridad y denegando al proceso httpd la lectura de un archivo con la etiqueta user_home_t.
<!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 /page2.html
on this server.</p>
</body></html>
Esto demuestra un problema clásico de SELinux. En el siguiente paso, aprenderás cómo solucionar esto cambiando el contexto del archivo.