Cómo proteger con contraseña los directorios web en Nginx


Los administradores de proyectos web a menudo necesitan proteger su trabajo de una forma u otra. A menudo, la gente pregunta cómo proteger con contraseña su sitio web mientras aún está en desarrollo.

En este tutorial, le mostraremos una técnica simple pero efectiva sobre cómo proteger con contraseña el directorio web cuando se ejecuta Nginx como servidor web.

En caso de que esté utilizando el servidor web Apache, puede consultar nuestra guía para proteger con contraseña un directorio web:

  1. Password Protect Web Directories in Apache

Para completar los pasos de este tutorial, deberá tener:

  • Nginx web server installed
  • Root access to the server

Paso 1: crear usuario y contraseña

1. Para proteger con contraseña nuestro directorio web, necesitaremos crear el archivo que contendrá nuestro nombre de usuario y contraseña cifrados.

Cuando use Apache, puede usar la utilidad "htpasswd". Si tiene esa utilidad instalada en su sistema, puede usar este comando para generar el archivo de contraseña:

# htpasswd -c /path/to/file/.htpasswd username

Al ejecutar este comando, se le pedirá que establezca una contraseña para el usuario anterior y luego se creará el archivo .htpasswd en el directorio especificado.

2. Si no tiene esa herramienta instalada, puede crear el archivo .htpasswd manualmente. El archivo debe tener la siguiente sintaxis:

username:encrypted-password:comment

El nombre de usuario que usarás depende de ti, elige el que más te guste.

La parte más importante es la forma en que generará la contraseña para ese usuario.

Paso 2: generar una contraseña cifrada

3. Para generar la contraseña, utilice la función "cripta" integrada de Perl.

Aquí hay un ejemplo de ese comando:

# perl -le 'print crypt("your-password", "salt-hash")'

Un ejemplo de la vida real:

# perl -le 'print crypt("#12Dfsaa$fa", "1xzcq")'

Ahora abra un archivo y ponga su nombre de usuario y el generado en cadena, separados con punto y coma.

Aquí es cómo:

# vi /home/tecmint/.htpasswd

Pon tu nombre de usuario y contraseña. En mi caso se ve así:

tecmint:1xV2Rdw7Q6MK.

Guarde el archivo presionando "Esc" seguido de ": wq".

Paso 3: actualice la configuración de Nginx

4. Ahora abra y edite el archivo de configuración de Nginx asociado con el sitio en el que está trabajando. En nuestro caso usaremos el archivo predeterminado en:

# vi /etc/nginx/conf.d/default.conf       [For CentOS based systems]
OR
# vi /etc/nginx/nginx.conf                [For CentOS based systems]


# vi /etc/nginx/sites-enabled/default     [For Debian based systems]

En nuestro ejemplo, protegeremos con contraseña la raíz del directorio para nginx, que es: /usr/share/nginx/html .

5. Ahora agregue la siguiente sección de dos líneas debajo de la ruta que desea proteger.

auth_basic "Administrator Login";
auth_basic_user_file /home/tecmint/.htpasswd;

Ahora guarde el archivo y reinicie Nginx con:

# systemctl restart nginx
OR
# service nginx restart

6. Ahora copie/pegue esa dirección IP en su navegador y se le pedirá la contraseña:

¡Eso es! Su directorio web principal ahora está protegido. Cuando desee eliminar la protección con contraseña en el sitio, simplemente elimine las dos líneas que acaba de agregar al archivo .htpasswd o use el siguiente comando para eliminar el usuario agregado de un archivo de contraseña.

# htpasswd -D /path/to/file/.htpasswd username