Me veía en la necesidad de proteger con usuario / contraseña un subdirectorio de una ruta http correspondiente a un servidor Apache en el que iba a instalar una aplicación web.Mi aplicación no se acerca (ni de lejos) a una aplicación crítica, por lo que no necesitaba nada especial. La primera idea que tuve fue valerme de la combinación .htaccess/.htpasswd, el vetusto mecanismo que Apache proporciona para estos casos. Mediante un .htaccess como el siguiente...
mylinux# cat .htaccess
AuthName "Area restrigida mediante usuario/contraseña"
AuthType Basic
AuthUserFile /ruta/absoluta/del/directorio/.htpasswd
AuthGroupFile /dev/null
require valid-user
...defines un tipo de seguridad que posteriormente permite acceder al recurso donde se ubique .htaccess con los users / passwords referenciados en el fichero /ruta/absoluta/del/directorio/.htpasswd
Este fichero debería quedar ubicado en una ruta distinta de donde nos encontremos, pero si esto no posible, lo aconsejable es darle un nombre distinto (alguno difícil de adivinar). El segundo caso es el que trato aquí.
Pues eso, creo un nuevo usuario (newuser) y un nuevo fichero de users / passwords (Aquí en lugar de .htpasswd lo he llamado .qks7wht1az). Luego subiré el fichero por ftp al servidor web:
mylinux# htpasswd -c .qks7wht1az newuser
New password:
Re-type new password:
Adding password for user newuser
Si quisiera modificar el password del usuario (o añadir un usuario nuevo):
mylinux# htpasswd .qks7wht1az newuser
New password:
Re-type new password:
Updating password for user newuser
Si lo que quisiera fuera borrar el usuario:
mylinux# htpasswd -D .qks7wht1az newuser
Deleting password for user newuser
Después subo ambos ficheros (.htaccess y .qks7wht1az). Tal como dije antes, en este ejemplo implementamos la vía menos segura, es decir, dejo los ficheros en la misma ruta que quiero proteger (o sea /ruta/absoluta/del/directorio).
El problema de todo esto es que en el .htaccess no vale con indicar la ruta relativa al directorio. Necesita la ruta absoluta del directorio que sirve la URI que quieres que tenga acceso restringido. Si administras la máquina no hay problema, pero ni era mi caso ni tenía la posibilidad de acceder a ella con línea de comandos.
Por suerte para mi, el servidor admitía PHP. Entonces lo que hize es crear un fichero como este
mylinux# cat getcwd.php
<?
echo getcwd();
?>
y colocarlo en la susodicha ruta. Mediante navegador accedo al fichero php que acabo de subir y, si todo es correcto, debería aparecer la ruta absoluta a nivel de filesystem del directorio donde reside el fichero. Esto es lo que debo indicar en la directiva AuthUserFile del .htaccess.
Tal como indica la doc de Apache aquí, si algo falla y no nos pide user/password, es posible que sea un problema de configuración del httpd.conf (ver directiva AllowOverride).
Si te encuentras en esta situación, y no tienes posibilidad de modificar la configuración del Apache, dos piedras.


Inglés a castellano
Anglès a català
2 Comentarios:
Gracias tenía exactamente el mismo problema y tu post me ha ayudado!
Me alegro que te haya servido, gracias.