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


Compartí este artículo