Permisos de acceso con Apache2 y .htaccess

Apache, nos permite crear en cada directorio del servidor ciertos archivos para controlar y limitar el acceso a ellos. Éste método es muy útil si no tenemos acceso al fichero de configuración de apache (httpd.conf) y queremos hacer este control de acceso. Sólo en este caso deberíamos aplicar este método. En el post de hoy, explicamos como utilizarlo.

A modo de prueba, vamos a crear tres directorios en un Virtual Host llamado host1.com. Esos directorios se llamaran publico, privado y autenticado. El primero de ellos, será de acceso libre para todos los visitantes, el segundo, será privado y ningún usuario podrá acceder a él y, el tercero, solo será accesible por los usuarios configurados. Por lo tanto, para empezar, accedemos a /var/www/host1.com y creamos los 3 directorios en su interior.

aitor@httpServer:/var/www/host1.com$ sudo mkdir publico privado autenticado
aitor@httpServer:/var/www/host1.com$ ls -la
 total 24
 drwxr-xr-x 5 root root 4096 2011-09-29 18:41 .
 drwxr-xr-x 4 root root 4096 2011-09-29 18:30 ..
 drwxr-xr-x 2 root root 4096 2011-09-29 18:41 autenticado
 -rw-r--r-- 1 root root 12 2011-09-29 18:36 index.html
 drwxr-xr-x 2 root root 4096 2011-09-29 18:41 privado
 drwxr-xr-x 2 root root 4096 2011-09-29 18:41 publico

Para que Apache acepte el uso de htaccess, debemos acceder al fichero httpd.conf, buscar la configuración del directorio /var/www y modificar la directiva AllowOverride de None a All.

aitor@httpServer:/var/www/host1.com$ sudo vim /usr/local/apache2/conf/httpd.conf

 ...
 #
 # AllowOverride controls what directives may be placed in .htaccess files.
 # It can be "All", "None", or any combination of the keywords:
 # Options FileInfo AuthConfig Limit
 #
 AllowOverride All
 ...

Al reiniciar Apache ya tendremos esta funcionalidad habilitada.

aitor@httpServer:/var/www/host1.com$ sudo /usr/local/apache2/bin/apachectl restart

Ahora vamos a crear los 3 index.html para los 3 directorios creados. Cada uno de ellos con un texto identificativo en su interior.

aitor@httpServer:/var/www/host1.com$ sudo vim publico/index.html
aitor@httpServer:/var/www/host1.com$ sudo vim privado/index.html
aitor@httpServer:/var/www/host1.com$ sudo vim autenticado/index.html

Directorio público: Archivo index.html con contenido “Contenido publico”.
Directorio privado: Archivo index.html con contenido “Contenido privado”.
Directorio autenticado: Archivo index.html con contenido “Contenido para usuarios del sistema”.

Si intentamos acceder a http://www.host1.com/publico o cualquiera de estos, vemos que podemos acceder sin problemas, por lo tanto, vamos a configurarlos correctamente.

En el directorio privado creamos un archivo oculto llamado htaccess. (Por defecto, apache llama con este nombre los ficheros que contienen información sobre el acceso a dichos directorios, aun así, es posible modificar el nombre de estos ficheros mediante la directiva AccessFileName en httpd.conf.):

aitor@httpServer:/var/www/host1.com$ sudo vim privado/.htaccess

Y añadimos en su interior el siguiente contenido:

#Archivo htaccess de privado
 deny from all

Con lo cual, si accedemos desde un cliente, podemos ver el mensaje:

Forbidden

You don’t have permission to access /privado/ on this server.

Lo que nos da a entender que hemos configurado correctamente este directorio.

Accedemos al directorio autenticado y creamos nuevamente un fichero llamado htaccess oculto y le añadimos el siguiente contenido

aitor@httpServer:/var/www/host1.com$ sudo vim autenticado/.htaccess
 #Archivo .htaccess de autenticado
 AuthType Basic
 AuthName "Archivos restringidos"
 AuthUserFile "/usr/local/apache2/users/htpasswd/.htpasswd"
 Require valid-user

En este fichero, podemos encontrar la directiva AuthUserFile que especifica el fichero donde se almacenaran los usuarios con acceso al directorio. Si un usuario no se ha añadido en ese fichero, no podrá acceder a dicho directorio.

Tenemos dos opciones para crear el archivo .htpasswd. La primera de ellas (a) es instalar instalar el paquete apache2-utils, el cual nos va a proporcionar el script htpasswd, comando utilizado para crear este fichero. Si no queremos instalar este paquete (por otra parte, tampoco es necesario), podemos dirigirnos al directorio bin de apache2 y allí encontraremos un script llamado htpasswd (b). Con este script crearemos el fichero de usuarios y contraseñas para acceder al directorio autenticado.

(a)

aitor@httpServer:/var/www/host1.com$ sudo apt-get install apache2-utils
 Leyendo lista de paquetes... Hecho
 Creando árbol de dependencias
 Leyendo la información de estado... Hecho

Una vez instalado, creamos el archivo .htpasswd de la siguiente forma:

sudo htpasswd -c /ruta_del_fichero/.htpasswd NombreUsuario

(b)

Si hemos decidido no instalarlo, accedemos al directorio /usr/local/apache2/bin y ejecutamos:

sudo ./htpasswd -c /ruta_del_fichero/.htpasswd NombreUsuario

aitor@httpServer:/usr/local/apache2/bin$ sudo ./htpasswd -c /usr/local/apache2/users/htpasswd/.htpasswd aitor
 New password:
 Re-type new password:
 Adding password for user aitor

Si ahora reiniciamos apache y accedemos a http://www.host1.com/autenticado, podremos acceder a su contenido previa autenticación con el usuario y la contraseña configurados.

Customized Errors en Apache2

Apache nos da la posibilidad de crear mensajes o paginas de error personalizadas. Para ello, debemos buscar la directiva ErrorDocument en el fichero httpd.conf. Para los errores de página no encontrada (404 Not Found), debemos dirigirnos a la línea 346 donde podremos especificar que archivo o comentario queremos mostrar al usuario al intentar acceder a una pagina que no existe. En esa linea podemos especificar un archivo html o un mensaje de texto insertado entre comillas dobles.

# Customizable error responses come in three flavors:
 # 1) plain text 2) local redirects 3) external redirects
 #
 # Some examples:
 #ErrorDocument 500 "The server made a boo boo."
 ErrorDocument 404 /missing.html
 #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
 #ErrorDocument 402 http://www.example.com/subscription_info.html
 #

Por defecto, al descomentar esta línea, va a mostrar un documento llamado missing.html y situado en la raiz de nuestro virtualhost. Podemos crear dicho archivo y añadir el texto que queramos, por ejemplo “La página no se ha encontrado“. Si reiniciamos apache y accedemos a una pagina que no existe, podremos observar dicho error.

Si accedemos a http://www.host1.com/paginainventada obtenemos el siguiente resultado:

La página no se ha encontrado

Posts relacionados:

Instalación y configuración de Apache2 en Linux

Configurar Virtual Hosts en Apache2

Configurar HTTPS para Apache2 en Linux

Anuncios

One Response to Permisos de acceso con Apache2 y .htaccess

  1. Pingback: Configurar Virtual Hosts en Apache2 « Aitor Rigada

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: