Cómo configurar la autenticación de contraseña con Nginx en Ubuntu 20.04

Introducción

Al configurar un servidor web, a menudo hay secciones del sitio a las que se desea restringir el acceso. Las aplicaciones web suelen proporcionar sus propios métodos de autenticación y autorización, pero el propio servidor web puede utilizarse para restringir el acceso si estos son inadecuados o no están disponibles. En esta guía, protegerá con contraseña los activos en un servidor web Nginx que se ejecuta en Ubuntu 20.04.

Prerrequisitos

Para comenzar, necesitarás:

  • Acceso a un entorno de servidor Ubuntu 20.04 con un usuario no root con sudoprivilegios para realizar tareas administrativas. Para saber cómo crear un usuario de este tipo, siga la guía de configuración inicial del servidor Ubuntu 20.04 .
  • Nginx instalado en su sistema, siguiendo los pasos 1 y 2 de esta guía sobre cómo instalar Nginx en Ubuntu 20.04 .

Paso 1: creación del archivo de contraseña

Para comenzar, debe crear un archivo que contenga sus combinaciones de nombre de usuario y contraseña. Puede hacerlo utilizando las utilidades OpenSSL que pueden estar disponibles en su servidor. Alternativamente, puede utilizar la htpasswdutilidad específica incluida en el apache2-utilspaquete (los archivos de contraseña de Nginx utilizan el mismo formato que Apache). Elija el método que más le guste a continuación.

Opción 1: creación del archivo de contraseña mediante las utilidades de OpenSSL

Si tiene OpenSSL instalado en su servidor, puede crear un archivo de contraseñas sin necesidad de paquetes adicionales. Creará un archivo oculto .htpasswden el /etc/nginxdirectorio de configuración para almacenar sus combinaciones de nombre de usuario y contraseña.

Puede agregar un nombre de usuario al archivo usando este comando. sammyse usa aquí como nombre de usuario, pero puede usar cualquier nombre que desee:

  1. sudo sh -c "echo -n 'sammy:' /etc/nginx/.htpasswd"

A continuación, agregue una entrada de contraseña cifrada para el nombre de usuario escribiendo:

  1. sudo sh -c "openssl passwd -apr1 /etc/nginx/.htpasswd"

Puede repetir este proceso para nombres de usuario adicionales. Puede ver cómo se almacenan los nombres de usuario y las contraseñas cifradas dentro del archivo escribiendo:

  1. cat /etc/nginx/.htpasswd
Outputsammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Opción 2: Creación del archivo de contraseñas mediante las utilidades de Apache

Si bien OpenSSL puede cifrar contraseñas para la autenticación de Nginx, a muchos usuarios les resulta más fácil utilizar una utilidad especialmente diseñada. La htpasswdutilidad, que se encuentra en el apache2-utilspaquete, cumple bien esta función.

Instale el apache2-utilspaquete en su servidor escribiendo:

  1. sudo apt update
  2. sudo apt install apache2-utils

Ahora tienes acceso al htpasswdcomando. Puedes usarlo para crear un archivo de contraseñas que Nginx pueda usar para autenticar usuarios. Crea un archivo oculto para este propósito .htpasswddentro de tu /etc/nginxdirectorio de configuración.

La primera vez que utilice esta utilidad, deberá agregar la -copción para crear el archivo especificado. Especifique un nombre de usuario ( sammyen este ejemplo) al final del comando para crear una nueva entrada dentro del archivo:

  1. sudo htpasswd -c /etc/nginx/.htpasswd sammy

Se le pedirá que proporcione y confirme una contraseña para el usuario.

Omite el -cargumento para cualquier usuario adicional que desees agregar:

  1. sudo htpasswd /etc/nginx/.htpasswd another_user

Si observa el contenido del archivo, podrá ver el nombre de usuario y la contraseña cifrada para cada registro:

  1. cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Paso 2: Configuración de la autenticación de contraseña de Nginx

Ahora que tiene un archivo con sus usuarios y contraseñas en un formato que Nginx puede leer, necesita configurar Nginx para que verifique este archivo antes de servir su contenido protegido.

Comience abriendo el archivo de configuración del bloque de servidor al que desea agregar una restricción. Para su ejemplo, utilizará el defaultarchivo de bloque de servidor instalado a través del paquete Nginx de Ubuntu:

  1. sudo nano /etc/nginx/sites-enabled/default

Para configurar la autenticación, debe decidir el contexto que desea restringir. Entre otras opciones, Nginx le permite establecer restricciones a nivel de servidor o dentro de una ubicación específica.

Este ejemplo será para una restricción a nivel de servidor. La auth_basicdirectiva activa la autenticación y el nombre de dominio que se mostrará al usuario cuando se le soliciten las credenciales. Utilizará la auth_basic_user_filedirectiva para indicarle a Nginx el archivo de contraseñas que creó:

/etc/nginx/sites-enabled/predeterminado

server {    listen 80 default_server;     . . .       auth_basic "Restricted Content";    auth_basic_user_file /etc/nginx/.htpasswd;}

Nota: Dependiendo del bloque que coloques como restricción, puedes controlar la granularidad de qué partes de tu sitio requieren una contraseña. Este ejemplo alternativo restringe solo la raíz del documento con un bloque de ubicación, e incluso puedes modificar esta lista para que solo se dirija a un directorio específico dentro del espacio web:

/etc/nginx/sites-enabled/predeterminado

server {    listen 80 default_server;     . . .       location / {    try_files $uri $uri/ =404;    auth_basic "Restricted Content";    auth_basic_user_file /etc/nginx/.htpasswd;    }}

Guarde y cierre el archivo cuando haya terminado. Reinicie Nginx para implementar su política de contraseñas:

  1. sudo systemctl restart nginx

El directorio que usted especificó ahora debe estar protegido con contraseña.

Paso 3: Confirmación de la autenticación de contraseña

Para confirmar que su contenido está protegido, intente acceder a su contenido restringido en un navegador web:

http://server_domain_or_IP

Debería aparecer un mensaje solicitando nombre de usuario y contraseña:

Si ingresa las credenciales correctas, podrá acceder al contenido. Si ingresa las credenciales incorrectas o presiona “Cancelar”, verá la página de error “Autorización requerida”:

Conclusión

Ahora deberías tener todo lo que necesitas para configurar la autenticación básica para tu sitio. Ten en cuenta que la protección con contraseña debe combinarse con el cifrado TLS para que tus credenciales no se envíen al servidor en texto sin formato. Consulta esta guía sobre cómo proteger Nginx con Let’s Encrypt en Ubuntu 20.04

SUSCRÍBETE A NUESTRO BOLETÍN 
No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio