Este artículo explica cómo proteger el acceso a un directorio en un servidor Web Apache utilizando archivos .htaccess
Proteger con contraseña un directorio en un servidor Web es una tarea sencilla utilizando las características de seguridad incluidas en Apache, sin necesidad de programar páginas PHP para autenticar usuarios. Simplemente se debe crear un archivo .htaccess
en el directorio que se desea proteger. Este archivo .htaccess
es verificado automáticamente por Apache cada vez que se accede al directorio antes de permitir acceso a cualquier archivo contenido dentro del mismo. El archivo .htaccess
pertenece al directorio que se está protegiendo y es posible tener tantos como directorios se desean proteger.
Veamos directamente con un ejemplo, suponiendo que se desea proteger el directorio /var/www/misitio/midirectorioseguro/
:
cd /var/www/misitio/midirectorioseguro/
Una vez dentro del directorio se debe crear el archivo .htaccess
:
nano .htaccess
En el contenido del archivo se definen los parámetros de seguridad del directorio:
AuthUserFile /var/www/misitio/midirectorioseguro/.htpasswd AuthName "Login midirectorioseguro" AuthType Basic require user pepe
El parámetro AuthUserFile
indica la ruta al archivo de autenticación de usuarios, el cual posee los pares usuario:contraseña
. En GNU/Linux por defecto la contraseña se encripta utilizando la función de sistema crypt()
. AuthType
indica el tipo de autenticación, puede ser "Basic" o "Digest" (más seguro que "Basic"). El último parámetro indica que se requiere autenticar el usuario "pepe" para acceder al directorio, también es posible requerir un grupo (require group ...
) o cualquier usuario válido dentro del archivo .htpasswd
(require valid-user
).
Una vez creado el archivo .htaccess
es necesario crear el archivo .htpasswd
, para ello es posible utilizar la herramienta htpasswd
o alguna herramienta online (aunque no es una práctica recomendable ya que estamos ingresando credenciales en sitios de terceros).
# htpasswd -c .htpasswd pepe New password: Re-type new password: Adding password for user pepe
Finalmente se deben configurar los permisos de acceso adecuados en el filesystem, sólo Apache debe tener acceso de lectura a ambos archivos:
chown www-data:www-data .htpasswd chmod 440 .htpasswd chown www-data:www-data .htaccess chmod 440 .htaccess
En el ejemplo se crea el archivo .htpasswd
dentro del mismo directorio. Una práctica de seguridad recomendable es crear el archivo .htpasswd
fuera del espacio del sitio Web para que quede protegido ante vulnerabilidades de tipo "Local File Inclusion" (LFI) o inclusión de archivos locales.
Una vulnerabilidad LFI permitiría incluir el contenido del archivo .htpasswd
en un script para ser enviado al cliente, por ejemplo a través de una llamada a la función include()
de PHP incorrectamente validada. Luego el atacante puede romper una contraseña débil utilizando diccionario o fuerza bruta (por ejemplo utilizando la herramienta "John the Ripper") y acceder a nuestro directorio protegido.
Por ello se recomienda ubicar los archivos .htpasswd
en un directorio no incluido en VirtualHosts.
Para mayor detalle sobre los archivos .htaccess
se recomienda leer la documentación oficial de Apache.
Tal vez pueda interesarte