Uno de los métodos más habituales para proteger carpetas en un servidor web bajo Apache, es la utilización del archivo .htaccess.
Proteger un directorio con .htaccess en Apache
Lo primero que tenemos que tener en cuenta, es si nuestro servidor web tiene activada la opción de trabajar con el fichero .htaccess.
Para comprobar si tenemos activada esta opción, es mirar en el fichero de configuración «/etc/apache2/sites-available/000-default.conf», si no tenemos creado ningun virtual host, si tenemos el siguiente parámetro.
AllowOverride All
Si en nuestro fichero de configuración existe este parametro, pero con el atributo de «None», cambiaremos este por «All».
Con este parametro le indicamos a Apache que reconozca todas las directivas que encuentre dentro del fichero .htaccess. Si solo queremos que tenga en cuenta las directivas de autenticación en vez de poner «All» tendremos que poner «AuthConfig».
Si tenemos creados virtual host, esto los tendremos que comprobar en el fichero que hayamos utilizado para crear la configuración de nuestro virtual host.
Ejemplo de configuración.
<Directory /var/www/pruebas.local/public_html/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
Crear nuestro fichero de contraseñas
Lo primero que tenemos que tener para proteger nuestra carpeta es un fichero con las contraseñas a las que vamos ha permitir el acceso. Este fichero contendrá el nombre de usuario y la contraseña codificada en MD5.
Para crear el fichero utilizaremos el siguiente programa.
htpasswd -c /ruta/donde/queremos/guardar/las/contraseñas nombreUsuario
Con el parametro «-c» le indicamos a htpasswd que vamos ha crear un fichero nuevo de contraseñas. Si el fichero ya existiera, este seria borrado.
Luego indicaremos la ruta completa donde queremos guardar el fichero con las contraseñas, no tiene por que estar dentro de las carpetas del servidor web, pero si tiene que tener los permisos para acceder a el.
Por ultimo le indicaremos el nombre de usuario que deseamos utilizar para esa contraseña.
Una vez finalizado nos quedara un fichero con la siguiente linea.
usuario:$spr1$lE/2eTdy$q/FMRI9UrogzET/Ks/6mH/
Si queremos añadir más usuarios a nuestro fichero, simplemente no utilizaremos el parámetro «-c», quedando de la siguiente manera.
htpasswd /ruta/donde/queremos/guardar/las/contraseñas nombreUsuario
Crear el fichero .htaccess
Para crear el fichero .htaccess, nos situaremos dentro del directorio que deseamos proteger.
cd /var/www/pruebas.local/public_html/protegido
Creamos el fichero .htaccess con nuestro editor favorito, en mi caso nano
nano .htaccess
Si el usuario con el estamos trabajando no tuviera los permisos suficientes para trabajar en el directorio que intentamos proteger, la creariamos utilizando «sudo»
sudo nano .htaccess
Si creamos el fichero, con cualquier usuario que no sea www-data, cambiaremos el propìetario del fichero, para no tener problemas.
sudo chown www-data:www-data .htaccess
Y añadimos las siguientes lineas al fichero .htaccess
AuthType Basic
AuthName "Area protegida, introduzca nombre de usuario y contraseña"
AuthUserFile /ruta/donde/queremos/guardar/las/contraseñas
Require valid-user
De esta forma, solo los usuario que están en el fichero de contraseñas que hemos creado, tendrán acceso al directorio.
Si solo queremos, que unicamente, que acceda un usuario de la lista que hemos creado. Cambiaremos el parametro de «Requiere» por «user» más el nombre de usuario que deseemos que tenga acceso. Quedando de la siguiente forma.
AuthType Basic
AuthName "Area protegida, introduzca nombre de usuario y contraseña"
AuthUserFile /ruta/donde/queremos/guardar/las/contraseñas
Require user UsuarioConAcceso
Y con esto ya tendríamos implementado nuestro control de accesos a nuestro directorio.
Si tiene alguna duda o sugerencia, déjanos un comentario.