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.
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
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.