Cómo configurar la autenticación de contraseña con Nginx en Ubuntu 22.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 22.04.
Prerrequisitos
Para comenzar, necesitarás:
- Acceso a un entorno de servidor Ubuntu 22.04 con un usuario no root con
sudo
privilegios 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 22.04 . - Nginx instalado en su sistema, siguiendo los pasos 1 y 2 de esta guía sobre cómo instalar Nginx en Ubuntu 22.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 htpasswd
utilidad específica incluida en el apache2-utils
paquete (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 .htpasswd
en el /etc/nginx
directorio 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. sammy
se usa aquí como nombre de usuario, pero puede usar cualquier nombre que desee:
- 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:
- 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:
- 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 htpasswd
utilidad, que se encuentra en el apache2-utils
paquete, cumple bien esta función.
Instale el apache2-utils
paquete en su servidor escribiendo:
- sudo apt update
- sudo apt install apache2-utils
Ahora tienes acceso al htpasswd
comando. Puedes usarlo para crear un archivo de contraseñas que Nginx pueda usar para autenticar usuarios. Crea un archivo oculto para este propósito .htpasswd
dentro de tu /etc/nginx
directorio de configuración.
La primera vez que utilice esta utilidad, deberá agregar la -c
opción para crear el archivo especificado. Especifique un nombre de usuario ( sammy
en este ejemplo) al final del comando para crear una nueva entrada dentro del archivo:
- sudo htpasswd -c /etc/nginx/.htpasswd sammy
Se le pedirá que proporcione y confirme una contraseña para el usuario.
Omite el -c
argumento para cualquier usuario adicional que desees agregar:
- 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:
- 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 default
archivo de bloque de servidor instalado a través del paquete Nginx de Ubuntu:
- 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_basic
directiva 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_file
directiva 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:
- 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ía tener todo lo que necesita para configurar la autenticación básica para su sitio. Tenga en cuenta que la protección con contraseña debe combinarse con el cifrado TLS para que sus credenciales no se envíen al servidor en texto sin formato. Consulte esta guía sobre cómo proteger Nginx con Let’s Encrypt en Ubuntu 22.04
Deja una respuesta