Cómo proteger con contraseña los directorios web en Apache usando el archivo .htaccess


Cuando administra proyectos en línea, a menudo necesita limitar el acceso a ese proyecto para protegerlo del mundo exterior. Puede haber diferentes razones para ello, por ejemplo, desea evitar que los rastreadores de los motores de búsqueda accedan a su sitio mientras aún está en fase de desarrollo.

En este tutorial, le mostraré cómo proteger con contraseña diferentes directorios de sitios web en el servidor web Apache. Hay muchas formas de lograr esto, pero revisaremos dos de ellas que se utilizan con más frecuencia.

El primer método configura la protección con contraseña directamente en el archivo de configuración de Apache, mientras que el segundo usa el archivo .htaccess.

Requisitos

Para configurar la protección por contraseña para sus directorios web, deberá tener:

  • A working Apache web server
  • The AllowOverride AuthConfig directive must be enabled in Apache configuration file.

Configurar el directorio protegido con contraseña de Apache

1. Para este tutorial, protegeremos el directorio raíz web principal /var/www/html . Para proteger ese directorio, abra la configuración de Apache:

---------------- On RedHat/CentOS based systems ----------------
# vi /etc/httpd/conf/httpd.conf

---------------- On Debian/Ubuntu based systems ----------------
# nano /etc/apache2/sites-available/000-default.conf

2. Busque la raíz del directorio de documentos Apache para/var/www/html y agregue lo siguiente como se sugiere:

<Directory /var/www/html> 
Options Indexes Includes FollowSymLinks MultiViews 
AllowOverride All
Order allow,deny
Allow from all 
</Directory>
<Directory /var/www/html> 
Options Indexes Includes FollowSymLinks MultiViews 
AllowOverride All 
Require all granted 
</Directory>

3. Guarde el archivo y reinicie Apache con el siguiente comando:

--------------- On Systemd -------------------
# systemctl restart httpd         [On RedHat based systems]
# systemctl restart apache2       [On Debian based systems]


--------------- On SysV init -----------------
# service httpd restart           [On RedHat based systems]
# service apache2 restart         [On Debian based systems]

4. Ahora usaremos el comando htpasswd para generar nombre de usuario y contraseña para nuestro directorio protegido. Este comando se utiliza para administrar archivos de usuario para la autenticación básica.

La sintaxis general del comando es:

# htpasswd -c filename username

La opción -c especifica el archivo que mantendrá la contraseña cifrada y nombre de usuario especifica el usuario para la autenticación.

5. Nuestro archivo de contraseñas debe estar ubicado fuera del directorio de acceso web de Apache para que esté bien protegido. Para ello crearemos un nuevo directorio:

# mkdir /home/tecmint

6. Luego de eso generaremos nuestro nombre de usuario y contraseña que serán almacenados en ese directorio:

# htpasswd -c /home/tecmint/webpass tecmint

Una vez que ejecute este comando, deberá ingresar una contraseña para nuestro nuevo usuario tecmint dos veces:

Después de eso, necesitaremos asegurarnos de que Apache pueda leer el archivo "webpass". Para ese propósito, deberá cambiar la propiedad de ese archivo con el siguiente comando:

---------------- On RedHat/CentOS based systems ----------------
# chown apache: /home/tecmint/webpass
# chmod 640 /home/tecmint/webpass
---------------- On Debian/Ubuntu based systems ----------------
# chown www-data /home/tecmint/webpass
# chmod 640 /home/tecmint/webpass

7. En este punto, nuestro nuevo usuario y contraseña están listos. Ahora debemos decirle a Apache que solicite una contraseña al acceder a nuestro directorio de destino. Para ese propósito, cree un archivo llamado .htaccess en/var/www/html:

# vi /var/www/html/.htaccess

Agregue el siguiente código en él:

AuthType Basic
AuthName "Restricted Access"
AuthUserFile /home/tecmint/webpass
Require user tecmint

8. Ahora guarde el archivo y ponga su configuración a prueba. Abra su navegador e ingrese su dirección IP o nombre de dominio en el navegador web, por ejemplo:

http://ip-address

Se le debe solicitar el nombre de usuario y la contraseña:

Ingrese el nombre de usuario y la contraseña que estableció para pasar a su página.

Notas adicionales

Si está utilizando alojamiento compartido, lo más probable es que no tenga acceso al archivo de configuración de Apache. Sin embargo, la mayoría de las empresas de hosting han habilitado la opción "AllowOverride All" de forma predeterminada. Esto significa que solo necesitará generar el nombre de usuario y la contraseña y luego seleccionar el directorio que desea proteger. Esto facilita significativamente su tarea.

Conclusión

Espero que este tutorial te haya resultado útil y te ayude a lograr tu objetivo. Si tiene alguna pregunta o comentario, no dude en publicarlos en la sección siguiente.