Comment configurer l’authentification par mot de passe avec Nginx sur Ubuntu 14.04

introduction

Lors de la configuration d’un serveur Web, vous souhaitez souvent limiter l’accès à certaines sections du site. Les applications Web fournissent souvent leurs propres méthodes d’authentification et d’autorisation, mais le serveur Web lui-même peut être utilisé pour restreindre l’accès s’il est inadéquat ou indisponible.

Dans ce guide, nous expliquerons comment protéger par mot de passe les ressources d’un serveur Web Nginx fonctionnant sous Ubuntu 14.04.

Conditions préalables

Pour commencer, vous devez accéder à un environnement de serveur Ubuntu 14.04. Vous aurez besoin d’un utilisateur non root avec les privilèges + sudo + pour effectuer les tâches administratives. Pour apprendre à créer un tel utilisateur, suivez notre Ubuntu 14.04 Guide de configuration du serveur initial.

Si vous ne l’avez pas déjà fait, installez Nginx sur votre ordinateur en tapant:

sudo apt-get update
sudo apt-get install nginx

Créer le fichier de mot de passe

Pour commencer, nous devons créer le fichier qui contiendra vos combinaisons nom d’utilisateur et mot de passe. Vous pouvez le faire en utilisant les utilitaires OpenSSL qui sont peut-être déjà disponibles sur votre serveur. Vous pouvez également utiliser l’utilitaire + htpasswd + spécialement conçu et inclus dans le package + apache2-utils + (les fichiers de mots de passe Nginx utilisent le même format qu’Apache). Choisissez la méthode ci-dessous que vous préférez.

Créer le fichier de mot de passe à l’aide des utilitaires OpenSSL

Si OpenSSL est installé sur votre serveur, vous pouvez créer un fichier de mot de passe sans package supplémentaire. Nous allons créer un fichier caché appelé + .htpasswd + dans le répertoire de configuration + / etc / nginx + pour stocker nos combinaisons de nom d’utilisateur et de mot de passe.

Vous pouvez ajouter un nom d’utilisateur au fichier à l’aide de cette commande. Nous utilisons + sammy + comme nom d’utilisateur, mais vous pouvez utiliser le nom de votre choix:

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

Ensuite, ajoutez une entrée de mot de passe cryptée pour le nom d’utilisateur en tapant:

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

Vous pouvez répéter cette procédure pour des noms d’utilisateur supplémentaires. Vous pouvez voir comment les noms d’utilisateur et les mots de passe cryptés sont stockés dans le fichier en tapant:

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

Créer le fichier de mot de passe à l’aide des utilitaires Apache

Alors qu’OpenSSL peut chiffrer les mots de passe pour l’authentification Nginx, de nombreux utilisateurs trouvent qu’il est plus facile d’utiliser un utilitaire conçu à cet effet. L’utilitaire + htpasswd +, présent dans le paquet + apache2-utils +, remplit bien cette fonction.

Installez le paquet + apache2-utils + sur votre serveur en tapant:

sudo apt-get update
sudo apt-get install apache2-utils

Maintenant, vous avez accès à la commande + htpasswd +. Nous pouvons l’utiliser pour créer un fichier de mot de passe que Nginx peut utiliser pour authentifier les utilisateurs. Nous allons créer un fichier caché à cet effet appelé + .htpasswd + dans notre répertoire de configuration + / etc / nginx +.

La première fois que nous utilisons cet utilitaire, nous devons ajouter l’option + -c + pour créer le fichier spécifié. Nous spécifions un nom d’utilisateur (+ sammy + dans cet exemple) à la fin de la commande pour créer une nouvelle entrée dans le fichier:

sudo htpasswd -c /etc/nginx/.htpasswd

Il vous sera demandé de fournir et de confirmer un mot de passe pour l’utilisateur.

Laissez de côté l’argument + -c + pour tout utilisateur supplémentaire que vous souhaitez ajouter:

sudo htpasswd /etc/nginx/.htpasswd

Si nous visualisons le contenu du fichier, nous pouvons voir le nom d’utilisateur et le mot de passe crypté pour chaque enregistrement:

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

Configurer l’authentification par mot de passe Nginx

Maintenant que nous avons un fichier avec nos utilisateurs et des mots de passe dans un format lisible par Nginx, nous devons configurer Nginx pour qu’il vérifie ce fichier avant de fournir notre contenu protégé.

Commencez par ouvrir le fichier de configuration de bloc de serveur auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous utiliserons le fichier de blocage du serveur + default installé via le paquet Ubuntu Nginx:

sudo nano /etc/nginx/sites-enabled/

A l’intérieur, avec les commentaires dépouillés, le fichier devrait ressembler à ceci:

/ etc / nginx / sites-enabled / default

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;
   }
}

Pour configurer l’authentification, vous devez choisir le contexte à restreindre. Parmi d’autres choix, Nginx vous permet de définir des restrictions au niveau du serveur ou à un emplacement spécifique. Dans notre exemple, nous restreindrons la totalité de la racine du document à un bloc d’emplacement, mais vous pouvez modifier cette liste pour ne cibler qu’un répertoire spécifique de l’espace Web:

Dans ce bloc d’emplacement, utilisez la directive + auth_basic + pour activer l’authentification et choisir un nom de domaine à afficher à l’utilisateur lors de la demande d’informations d’identification. Nous allons utiliser la directive + auth_basic_user_file + pour pointer Nginx sur le fichier de mot de passe que nous avons créé:

/ etc / nginx / sites-enabled / default

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;


   }
}

Enregistrez et fermez le fichier lorsque vous avez terminé. Redémarrez Nginx pour mettre en œuvre votre politique de mot de passe:

sudo service nginx restart

Le répertoire que vous avez spécifié doit maintenant être protégé par mot de passe.

Confirmer l’authentification par mot de passe

Pour confirmer que votre contenu est protégé, essayez d’accéder à votre contenu restreint dans un navigateur Web. Vous devriez recevoir un nom d’utilisateur et un mot de passe qui ressemblent à ceci:

image: https: //assets.digitalocean.com/articles/nginx_password_1404/password_prompt.png [invite de mot de passe Nginx]

Si vous entrez les informations d’identification correctes, vous serez autorisé à accéder au contenu. Si vous entrez des informations d’identification erronées ou cliquez sur «Annuler», la page d’erreur «Autorisation requise» s’affiche:

image: https: //assets.digitalocean.com/articles/nginx_password_1404/unauthorized_error.png [erreur non autorisée par Nginx]

Conclusion

Vous devriez maintenant avoir tout ce dont vous avez besoin pour configurer l’authentification de base pour votre site. N’oubliez pas que la protection par mot de passe doit être associée au cryptage SSL afin que vos informations d’identification ne soient pas envoyées au serveur en texte brut. Pour apprendre à créer un certificat SSL auto-signé à utiliser avec Nginx, suivez la procédure suivante: https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu -14-04 [ce guide]. Pour savoir comment installer un certificat commercial, suivez his guide.

Related