Categorías
Recursos Servidores

Proteger con autenticación una ruta en Apache2

En este artículo os quiero explicar como proteger una carpeta de un site con Apache2, esto puede ser útil si por ejemplo tenemos nuesta web en producción y estamos trabajando en una versión nueva con ciertas mejoras y lo tenemos en nuestro servidor web pero no queremos que ningún curiosillo se ponga a trastear en nuestra nueva versión.

La mejor solución a eso es simplemente protegerlo con un usuario y contraseña.

auth_ask

Para esto necesitaremos hacer uso de la herramienta htpasswd que se puede encontrar en el paquete de apache-utils

Instalación de lo necesario

Actualizamos nuestros paquetes locales e instalamos Apache2(si no lo teníamos) y apache-utils

sudo apt-get update

sudo apt-get install apache2 apache2-utils

Creando el archivo de autenticación

Crearemos un archivo oculto llamado .htpasswd en la carpeta de Apache2 que será usado para la autenticación

sudo htpasswd -c /etc/apache2/.htpasswd codigodiario

Siendo codigodiario el nombre del usuario que usaremos y /etc/apache2/.htpasswd el lugar y el nombre del archivo

Nos pedirá primero la contraseña del usuario administrador y luego nos pedirá dos veces la contraseña para el usuario codigodiario

Una vez escrito la contraseña y se haya creado sin error, podremos pasar a echar un vistazo al archivo que se ha creado

cat /etc/apache2/.htpasswd

htpasswd

Configurar la autenticación

Una vez que tengamos ya nuestro archivo de autenticación, tenemos que indicarle a Apache de que compruebe el usuario antes de servir su contenido, esto se puede hacer de dos formas, por el archivo de configuración de nuestro sitio o através de un archivo .htaccess

Configuración el archivo del virtual host

Vamos a editar el archivo de configuración de nuestra web para añadirle los parámetros necesarios para la autenticación

sudo nano -w  /etc/apache2/sites-enabled/codigodiario.me.conf

Tendremos algo parecido a esto

<VirtualHost *:80>
    ServerAdmin info@codigodiario.me
    DocumentRoot /var/www/codigodiario
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

La autenticación se realiza por directorios, pudiendo así restringir una carpeta especifica dentro de nuestra web o la web entera restringiendo la raiz, en este artículo yo restringiré una carpeta de pruebas que tengo llamada fotos.

Tendríamos que añadir un bloque de <Directory «___»>  quedando el resultado así

<VirtualHost *:80>
    ServerAdmin info@codigodiario.me
    DocumentRoot /var/www/codigodiario
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory "/var/www/codigodiario/fotos">
        AuthType Basic
        AuthName "Contenido restringido solo para administradores"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>
</VirtualHost>

Le estamos indicando a Apache que queremos que esta carpeta tenga una autenticación básica, que aparezca un mensaje personalizado cuando nos pida la contraseña (AuthName), la localización de nuestro archivo de autenticación para que pueda hacer la comprobación correcta del usuario(AuthUserFile) y por último el tipo de validación, aquí se puede jugar bastante con la configuración, yo he puesto que cualquier usuario que esté añadido en el archivo de .htpasswd y se verifique correctamente podrá acceder, pero se puede poner que solo pueda acceder X usuario, o Y grupo/s.

Guardamos el archivo .conf y reiniciamos el servicio de Apache2

sudo service apache2 restart

Y ya tendriámos el directorio fotos protegido con contraseña.

 

Configurando autenticación a través del archivo .htaccess

Tendriamos que crear un archivo llamado .htaccess en la raiz de la carpeta que queramos restringir y usar los mismo parametros que hemos usado para rellenar dicho archivo

AuthType Basic
AuthName "Contenido restringido solo para administradores"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Espero que os sea de ayuda y nos vemos en el próximo artículo.

Por Deniz M.

Desarrollador a tiempo completo, amante del buen rol y los juegos de plataforma. Mi tiempo libre me gusta invertirlo para ver series y malas peliculas