Apache User Authentication
Martes , 29 de Abril de 2003. Enrique Barbeito García
A la hora de levantar un servidor WWW mediante Apache no siempre querremos que todos los directorios accesibles vía servidor web sean públicos y visibles para cualquiera. Podremos limitar el acceso a aquellos directorios de nuestro servidor para según que usuarios queramos. Y lo mejor de todo: de un modo muy fácil :)
¿Cómo? Pues mediante la utilidad htpasswd y una serie de pequeños cambios. A modo de ejemplo digamos que tenemos un servidor llamado servidor.org y que no queremos que el directorio blog/ sea de libre acceso, sino que únicamente tengas acceso dos personas: ebarbeito y tamara. De tal modo que accediendo vía web a: http://servidor.org/blog/ nuestro servidor Apache muestre una ventana de autenticación de usuario y, en caso de usuario/contraseña inválida, muestre un error de autenticación.
Bien, para empezar entramos al servidor como usuario root por supuesto y nos situamos en el directorio que queremos proteger:
# cd /var/www/blog
En él creamos un archivo llamado .htaccess que contendrá la información del directorio y método de autenticación entre otros:
# vi .htaccess
AuthUserFile /var/www/blog/.htpasswd
AuthGroupFile /dev/null
AuthName “Area de acceso restringido”
AuthType Basic
Options All
<Limit GET POST PUT>
require valid-user
</Limit>
Guardamos cambios y pasamos a utilizar la herramienta htpasswd para crear el par de usuarios que deseamos:
# htpasswd -c /var/www/blog/.htpasswd ebarbeito
New password:
Re-type new password:
Adding password for user ebarbeito
# htpasswd var/www/blog/.htpasswd tamara
New password:
Re-type new password:
Adding password for user tamara
De este modo crearíamos nuestros usuarios deseados. Fijaos en la primera y segunda ejecución de htpasswd. Si os fijáis, en la primera vez que lo lanzo, utilizo el parámetro -c. Con el le indico que cree un nuevo archivo .htpawwd (fichero en donde quedarán almacenados los nombres de usuario y contraseñas respectivas para cada uno de ellos). En la segunda ejecución no debo emplear dicho parámetro, pues el fichero está ya creado y no queremos sobreescribirlo, sino añadirle otro/s usuario/s. Podemos echarle un vistazo al archivo .htpasswd:
# cat .htpasswd
ebarbeito:wS4LGsK2Lm5Eg
tamara:kObv3TRsUhWqH
Hay tenéis la lista de usuarios creados con sus respectivas contraseñas encriptadas.
Pues nada, ya lo tenemos todo listo :) solo nos queda modificar el fichero de configuración del servidor Apache para indicarle que uno de los directorios con los que puede trabajar, debe pedir autorización previa. Editamos el archivo httpd.conf (normalmente situado en /etc/apache/httpd.conf) y en el agregamos las siguientes líneas:
#
# Mis directorios protegidos
#
<Directory “/var/www/blog”>
AllowOverride All
</Directory>
Guardamos los cambios y reiniciamos el servidor para que funcione de acuerdo a la configuración actual:
# /etc/init.d/apache start
Pus nada. ¡Ya lo tenemos listo! Podemos hacer la prueba intentando acceder a nuestro directorio protegido por medio de algún navegador. Y podemos ir vigilando los logs del Apache relativos a accesos y errores producidos; estos archivos son: access_log y error_log (normalmente situados en /var/log/apache/)
Prueba 1: Accedemos y cuando nos pide autorización y cancelamos, el servidor nos envía a la página de error correspondiente:
Authorization Required
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn’t understand how to supply the credentials required.
Prueba 2: Si se pone una contraseña incorrecta
==> /var/log/apache-perl/error_log <==
[Mon Apr 28 14:07:10 2003] [error] [client 192.168.0.1] user ebarbeito: authentication failure for "/blog": password mismatch
Prueba 3: Si se pone un usuario no válido
==> /var/log/apache-perl/access_log <==
192.168.0.1 - carlos [28/Apr/2003:14:07:55 +0200] "GET /blog HTTP/1.1" 401 487
==> /var/log/apache-perl/error_log <==
[Mon Apr 28 14:07:55 2003] [error] [client 192.168.0.1] user carlos not found: /blog
192.168.0.1 - carlos [28/Apr/2003:14:07:55 +0200] "GET /blog HTTP/1.1" 401 487
Prueba 4: Ingresando un usuario y contraseña correctos: Accederíamos al contenido del directorio sin ningún problema.
Así de fácil y útil es el Apache User Authentication ;)
hay alguna forma para que los usuarios y las passwords sean los de sistema????
No puedo hacer que se salga el cartelito de
acceso restringido
nombre de usuario y contraseña
ya hice el .htaccess
y el .htpasswd
pero no reinicie el servidor
esto es necesario
no hay forma de verlo sin reiniciarlo?