Ajouter un commentaire

Nginx : comment protéger un dossier ou une page par un mot de passe

Introduction

A la création d'un site ou d'un serveur web, on souhaite souvent protéger une partie du site, qui ne doit être accessible qu'aux administrateurs uniquement.
Dans cette partie, on protégera notamment les pages d'administrations, d'accès à la base de données (PHPmyAdmin...) et tous les scripts qui ne doivent être accessibles que par les personnes autorisées.

Pour cela, Nginx permet de protéger un dossier ou une url grâce à identifiant et un mot de passe.

 

Génération du fichier de mot de passe hashé

Pour ne pas afficher en clair notre mot de passe dans un fichier de configuration, nous allons commencer par générer un mot de passe au format APR-1.
APR-1.est une fonction de hashage utilisée par les serveurs Apache pour chiffrer les mots de passe .htaccess. Il se sert de MD5 comme base.

Pour générer ce mot de passe, nous allons utiliser openssl avec la commande suivante qui vous demandera de taper un mot de passe, puis de le confirmer.

openssl passwd -apr1
Password:
Verifying - Password:
$apr1$EndwnhD8$LPy5If9aTsK7ykmlrfh/61

La chaine $apr1$EndwnhD8$LPy5If9aTsK7ykmlrfh/61 est le mot de passe hashé pour cette exemple, vous aurez une chaine différente avec votre mot de passe à vous.
Copier cette chaine pour pouvoir la coller dans le fichier de mot de passe qui nous allons créer ci-dessous.

 

Création du fichier de protection par mot de passe

Imaginons que nous voulons protéger le répertoire /admin qui est dans le dossier du vHost par défaut de Nginx.

Nous allons donc créer le ficher .htpasswd dans ce dossier : il contiendra le nom d'utilisateur et le mot de passe hashé.

sudo nano /usr/share/nginx/html/admin/.htpasswd

Dans ce nouveau fichier, commencer par coller le mot de passe hashé généré précédemment.
Puis ajouter le nom de l'utilisateur devant, en utilisant : en séparateur entre les 2 chaines.

Par exemple, utilisateur admin dans mon cas.

admin:$apr1$EndwnhD8$LPy5If9aTsK7ykmlrfh/61

 

Modification de la configuration du vHost

Il faut maintenant modifier la configuration de notre vHost pour indiquer le dossier à protègrer et l'emplacement du mot de passe.

Ouvrez le fichier de configuration de vHost Nginx par défaut.

sudo nano /etc/nginx/conf.d/default.conf

Puis ajouter le dossier /admin qui contient les commandes auth_basic et auth_basic_user_file utilisées pour protéger cette adresse.

server {
    listen 80 localhost;
    root   /usr/share/nginx/html;
    index  index.html index.htm index.php;
    .....
    location /admin {
        try_files $uri $uri/ =404;
        auth_basic "Restricted Content";
        auth_basic_user_file /usr/share/nginx/html/admin/.htpasswd;
    }
    .....

}

Maintenant, essayez d'ouvrir http://<adresse de votre serveur/admin et vous obtiendrez la demande d'authentification ci-dessous.
L'adresse ne sera accessible que si vous saisissez l'identifiant et le mot de passe spécifiés précédemment dans le fichier .htpasswd

 

Tags: 
You must have Javascript enabled to use this form.