Welcome to my blog

miércoles, 23 de febrero de 2011

Httpd + Selinux

Este entrada se hace con el fin de solucionar un problema muy comun en un servidor web al crear un nuevo sitio web o cuando descargamos una aplicacion web en un directorio diferente al de apache y cuando movemos este archivo creado al directorio de apache que problema sucede al acceder a ese sitio web. Ya que a muchos le a sucedido y nunca sabemos por que sucede y tampoco sabemos como solucionarlo.

En esta entrada les dare a conocer con un ejemplo cual es ese problema comun que puede suceder, como saber cual es el problema y dar solución a ese problema.

A continuacion mostrare el ejemplo de cómo se da el problema o el error anterior en apache y la solución a este problema. Esto ejemplo esta hecho bajo una plataforma de Centos.

Antes de todo debemos de tener un servidor web instalado en la maquina. Nuestro servidor web es apache.

1. Creamos un archivo donde alojaremos nuestro sitio web. En el ejemplo creamos el archivo en un directorio diferente al del directorio donde se alojan los sitios web de apache. Lo realizamos en otro sitio colocando como ejemplo como si hubiéramos descargado una aplicación web desde internet y hayamos guardado en otro sitio diferente al directorio de apache.
Nuestro archivo fue creado en el directorio /tmp como el nombre de prueba. Esto se puede observar en la imagen.

2. Ahora lo que haremos es mover el archivo prueba del directorio donde fue creado al directorio donde se alojan los sitios web de apache. Los sitios web se alojan en el directorio /var/www/html.
En la imagen podemos ver como movemos el archivo prueba al directorio de apache.


3. Verificamos los permisos que tiene nuestro archivo y ingresamos al archivo prueba con un editor de texto ya sea nano, vim, gedit, etc. En este caso lo hicimos con el editor nano. Podemos observar que los permisos están bien para que el usuario propietario lo pueda ejecutar.

4. Dentro del archivo colocamos un mensaje para identificar el sitio, algo así como lo muestra la imagen. Y luego guardamos los cambios.


5. Ahora nos dirigimos al navegar para verificar nuestro sitio, para ello ingresamos la siguiente dirección: http://localhost/prueba. donde localhost es porque nuestro servidor web está en la misma máquina o localmente y prueba porque es nuestro archivo que tiene el sitio web con el cual estamos haciendo la prueba.

Como puede ven en la imagen anterior observamos un error. Este es el error del cual les estaba hablando al principio de esta entrada. Dicho error nos dice que no se puede acceder al sitio que no tiene permisos. Esto error de igual manera nos va salir si realizamos los mismo pasos anteriores con una aplicación web descargada de internet.



Como solucionar el error anterior ?.

1. Nos dirigimos a la consola para revisar los logs y verificar cual es el error ocasionado por apache. Para ello ejecutamos el comando que se muestra en la imagen. Y podemos observar que esta denegando apache que se acceda al sitio web.

2. Luego verificamos de nuevo cuales son los permisos que tiene nuetro sitio web. Si le damos todos los permisos a archivo prueba de todos modos nos va a salir el mismo error. Ejecutamos el comando mostrado en la imagen para observar los permisos.

3. Ahora de nuevo verificamos los permisos pero esta vez le añadimos los permisos del SElinux. Y esta ocasión podemos observar algo diferente en el archivo prueba a los otros archivos. La diferencia se puede observar claramente en el contexto de SElinux, ya que es diferente al de los otros. Si miramos bien en la imagen que se muestra debajo podemos ver que el archivo prueba cuando se crea en el directorio /tmp hereda los permisos de la raíz de ese directorio y al mover el archivo prueba al directorio de apache no cambia sus permisos por los de apache y su contexto queda que con el del directorio /tmp (directorio temporal). Esto hace que cuando al acceder al archivo prueba nos sale un error.


4. Luego de saber cuál es el error o el problema por el cual nos podemos acceder al sitio web es de SElinux, instalamos un paquete el cual es un servicio que nos brinda ayuda de cómo solucionar problemas de SElinux.. El paquete a instalar lo podemos observar en la imagen y nos muestra como ejecutarlo.



5. Iniciamos el servicio que acabamos de instalar.


6. Verificamos los logs del SElinux, el cual nos muestra cual es la causa del error y nos brinda un comando para ver detalladamente la causa de error. El comando para ver detalladamente el error lo podemos observar en la imagen.

7. Ejecutamos el comando que nos dijo los logs SElinux y podemos ver detalladamente el error. Nos muestra que el contexto que tiene el archivo prueba que aloja nuestro sitio web no coincide con el que debe de ser para que apache deje acceder al sitio web y nos muestra cual es el contexto correcto para qué apache deje acceder al sitio y también nos permite saber más detalladamente el error. También nos da un comando para solucionar el problema de los contextos. Todo esto se muestra en las siguientes imágenes.

8. Ejecutamos el comando arrojado en el paso anterior para solucionar este problema o el error. Este comando restaurar el contexto adecuado para nuestro archivo prueba.


9. Verificamos otra vez los permisos de Selinux del directorio de apache donde está ubicado nuestro archivo prueba el cual contiene el sitio web que estamos creando y observa en los permisos de Selinux o el contexto cambia y es igual de los otros archivos y podemos ver que ya los permisos ya fueron heredados por el directorio de apache.


10. De nuevo volvemos al navegador para acceder al sitio web prueba.

Ya esta el problema o el error solucionado correctamente, y sabemos por que ocurre este error y entender de que se trata el problema y como se soluciona.



Enlaces de interés:

http://es.wikipedia.org/wiki/SELinux

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-selinux.html

Este es un enlace donde se ven mas claro lo anterior.
http://es.scribd.com/doc/49475972/httpd-y-selinux

















No hay comentarios:

Publicar un comentario