viernes, 3 de abril de 2015

Quitar índices de directorio en Apache

El servidor web Apache viene por defecto con el modulo que permite el listado de directorios, en ocasiones nos viene bien, pero en otras, esto puede convertirse en un problema de seguridad. Aquí vamos a enseñar como desactivarlo en caso de ser necesario. 





En el servidor web Apache tenemos 3 métodos distintos para desactivar dicho listado:

  1. Usando un archivo llamado: index.htm o index.html o index.php
  2. Usando una opción en el fichero .htaccess
  3. Modificando el archivo de configuración por defecto: /etc/apache2/sites-available/default



Método 1 - index.htm, index.html, index.php - 

El primero consiste es crear un archivo llamado:index.htm o index.html o index.php,  en cada uno de los directorios donde no queremos que se listen los archivos y carpetas.

Nota: el archivo puede estar vacío, en este caso nos aparecerá una pagina web en blanco.

Por ejemplo en esta web, yo cree un archivo index.html con el contenido que aparece en la siguiente imagen:







Método 2 - .htaccess 

Este método consiste en crear un archivo oculto llamado: .htaccess que contenga la siguiente línea: Options -Indexes

El fichero .htaccess (hypertext access), también conocido como archivo de configuración distribuida, es un fichero especial, popularizado por el Servidor Apache2 que permite definir diferentes directivas de configuración para cada directorio (con sus respectivos subdirectorios) sin necesidad de editar el archivo de configuración principal de Apache.

El fichero .htaccess ofrece un universo de posibilidades, detallamos a continuación los usos más frecuentes.

  1. Autorización, Autenticación. Los ficheros .htaccess son usados frecuentemente para especificar restricciones de seguridad para un directorio en particular, de aquí el sufijo "access".
  2. El fichero .htaccess se acompaña frecuentemente de otro fichero .htpasswd que guarda usuarios válidos y sus contraseñas.
  3. Creación de URLs Amigables (semánticas).
  4. Los servidores suelen usar el .htaccess para reescribir URLs largas y complejas, en otras más simples y fácilmente recordables.
  5. Restringir el acceso, Permite bloquear (usando allow/deny) usuarios por su dirección IP y/o dominio e ISPs. También permite bloquear bots y arañas web.
  6. SSI Permite el conjunto de directivas SSI. Controlar el comportamiento por defecto del servidor cuando no se especifica ninguna página web.
  7. Crear redirecciones estáticas Respuestas de error personalizadas
  8. Cambiar la página que se muestra cuando un error de la parte del servidor ocurre, por ejemplo: HTTP 404 Not Found. MIME types Controlar como el servidor maneja diferentes tipos de archivos.
  9. Control de Caché. Los ficheros .htaccess permiten a un servidor controlar la caching por medio de los navegadores web y proxies para reducir el uso del ancho de banda , la carga del servidor , y el lag percibido 

Nota: si el archivo .htaccess ya existe, solo le tendremos que añadir dicha linea. Con esto evitamos que cualquier directorio que se encuentre dentro del directorio principal liste los archivos.



En este caso aparece el siguiente mensaje:




NOTA IMPORTANTE: Solo funcionara el fichero .htaccess si previamente hemos cambiado la directiva AllowOverride None por AllowOverride All

  1. Cuando el valor de la directiva AllowOverride es None, entonces los ficheros .htaccess son ignorados completamente. En ese caso, el servidor ni siquiera intentará leer los archivos .htaccess existentes. 
  2. Cuando el valor especificado en la directiva AllowOverride es All, entonces cualquier directiva que tenga  .htaccess puede ser usada en los ficheros .htaccess.


Vamos a cambiar AllowOverride NONE por ALL

En webmin nos vamos a: Servidores > Servidor Web Apache
y pulsamos en el Servidor Virtual por defecto, que tiene la raíz de documentos en: /var/www



 Ahora pulsamos en Editar Directivas.



Ahora buscamos la directiva AllowOverride None y la cambiamos por la directiva AllowOverride All, que se encuentra en la siguiente dirección: /etc/apache2/sites-available/default



Así es como queda una vez modificado.



Pulsamos en Salvar


Por ultimo pulsamos en Aplicar Cambios





Método 3 - /etc/apache2/sites-available/default

Este método editamos directamente el archivo de configuración en apache, que se encuentra en la siguiente dirección: /etc/apache2/sites-available/default
Buscamos la linea: Options Indexes FollowSymLinks, modificamos dicha línea agregando un signo “-“ al inicio de “Indexes”, quedando de la siguiente forma: Options -Indexes FollowSymLinks

En webmin nos vamos a: Servidores > Servidor Web Apache
y pulsamos en el Servidor Virtual por defecto, que tiene la raíz de documentos en: /var/www



 Ahora pulsamos en Editar Directivas.



Ahora buscamos la directiva Options Indexes FollowSymLinks  Multiviews


y la cambiamos por la directiva Options -Indexes FollowSymLinks MultiViews



NOTA IMPORTANTE: en este método, como NO vamos a usar un archivo .htaccess para restringir el listado de directorios y archivos, NO es necesario cambiar la directiva AllowOverride None por AllowOverride All. (como podemos observar el captura de pantalla anterior)


Por ultimo en la siguiente pantalla pulsamos en Aplicar Cambios


El resultado es el siguiente, si intentamos listar el contenido de un directorio que tiene dicha restricción.


 



























2 comentarios:

Anónimo dijo...

Muchas Gracias!

Anónimo dijo...

Hola! Gracias x la info!!! Sabes si existe un metodo para hacer bypass (o ignorar) los permisos establecidos por el .htaccess de un determinado website?