Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Proteger archivos o directorios con contraseña en Apache

Imago voragine.net
[actualizado el ]

Proteger carpetas o archivos accesibles vía HTTP con contraseña permite añadir una capa de seguridad en un servidor web. Se puede hacer usando cualquier gestor de contenidos como WordPress o Drupal de manera trivial, sin embargo hacerlo directamente usando el servidor web, Apache en este caso, evita ejecutar PHP y ahorra recursos de hardware. Esto es especialmente útil si se está intentando evitar un ataque de fuerza bruta.

Para proteger archivos o directorios bajo contraseña en Apache se puede realizar en los archivos de configuración global de Apache o usando archivos htaccess y htpasswd. La segunda manera está desaconsejada por razones de rendimiento y seguridad, así que aquí se explica la primera en un servidor web Apache 2.4 funcionando sobre Debian Jessie.

La primera manera requiere acceso a los archivos de configuración de Apache; si no se tiene, se puede intentar la segunda. En la página Htccess Tools se puede generar el contenido necesario para los archivos htaccess y htpasswd.

Módulos necesarios

En este caso se va a configurar el acceso mediante nombre de usuario y contraseña, y éstas se guardarán en un archivo de texto plano. Para ello necesitamos que los siguientes módulos de Apache estén activos:

  • mod_auth_basic
  • authn_file
  • mod_authz_user
  • authn_core_module
  • authz_core_module

En la documentación de Apache hay una descripción de los módulos necesarios si se quiere habilitar el acceso por hostname o IP o alojar las contraseñas de otra manera.

Para comprobar que los módulos están activos se puede ejecutar:

apache2ctl -M

Si hay que activar alguno:

a2enmod nombre_del_modulo

Autenticación: cómo generar las contraseñas y dónde guardarlas

Para guardar las contraseñas basta un archivo de texto alojado fuera de las ubicaciones accesibles vía HTTP y que tenga los permisos adecuados según la configuración del servidor web para que sea accesible por el usuario del servidor web y seguro al mismo tiempo. Esto último es especialmente importante en un entorno de servidor compartido, donde cada host debería tener su propio archivo de contraseñas. Como ejemplo se usará /var/www/htpasswd/hostname.

Para generar contraseñas se puede usar la orden htpasswd en la línea de comandos con la siguiente sintaxis:

htpasswd -c /var/www/htpasswd/hostname nombre_de_usuario

Donde el primer parámetro es la ruta al archivo de contraseñas y el segundo el nombre del usuario al que se quiere dar acceso. En versiones más recientes de htpasswd las contraseñas se generan por omisión usando encriptación MD5. Si se usa una versión antigua hay que añadir el modificador -m.

Modificar la configuración de Apache

La configuración necesaria se puede añadir al archivo de configuración de un virtual host, por ejemplo:

<Directory "/var/www/hostname/directory_name">
        AuthType Basic
        AuthName "Acceso restringido"
        AuthUserFile /var/www/htpasswd/hostname
        Require user nombre_de_usuario
</Directory>

Ya solo queda reiniciar Apache:

service apache2 restart

4 comentarios

Dejar un comentario

*
*