Comment configurer l’authentification par mot de passe avec Apache sur Ubuntu 16.04

introduction

Lorsque vous exploitez un site Web, vous voudrez peut-être restreindre l’accès aux visiteurs à certaines parties du site. Les applications Web peuvent fournir leurs propres méthodes d’authentification et d’autorisation, mais le serveur Web lui-même peut également être utilisé pour restreindre l’accès si celles-ci sont inadéquates ou indisponibles.

Dans ce guide, nous montrerons comment protéger par mot de passe des actifs sur un serveur Web Apache exécuté sous Ubuntu 16.04.

Conditions préalables

Pour compléter ce didacticiel, vous devez avoir accès à un serveur Ubuntu 16.04.

En outre, vous aurez besoin des éléments suivants avant de pouvoir commencer:

Lorsque tous ces éléments sont en place, connectez-vous à votre serveur en tant qu’utilisateur + sudo + et continuez ci-dessous.

Étape 1 - Installation du paquet Apache Utilities

Nous allons utiliser un utilitaire appelé + htpasswd +, qui fait partie du paquetage + apache2-utils +, pour créer le fichier et gérer le nom d’utilisateur et les mots de passe nécessaires pour accéder au contenu restreint.

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

Étape 2 - Création du fichier de mot de passe

Nous avons maintenant accès à la commande + htpasswd +. Nous pouvons utiliser cela pour créer un fichier de mot de passe pouvant être utilisé par Apache pour authentifier les utilisateurs. Nous allons créer un fichier caché à cet effet appelé + .htpasswd + dans notre répertoire de configuration + / etc / apache2 +.

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/apache2/.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/apache2/.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/apache2/.htpasswd
Outputsammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Étape 3 - Configuration de l’authentification par mot de passe Apache

Maintenant que nous avons un fichier avec des utilisateurs et des mots de passe dans un format lisible par Apache, nous devons le configurer pour qu’il vérifie ce fichier avant de fournir notre contenu protégé. Vous pouvez le faire de deux manières: soit directement dans le fichier d’hôte virtuel d’un site, soit en plaçant les fichiers .htaccess dans les répertoires soumis à restriction. Il est généralement préférable d’utiliser le fichier d’hôte virtuel, mais si vous devez autoriser les utilisateurs non root à gérer leurs propres restrictions d’accès, vérifiez-les dans le contrôle de version à côté du site Web ou utilisez déjà une application Web utilisant des fichiers .htaccess. , consultez la deuxième option.

Choisissez l’option qui convient le mieux à vos besoins.

Option 1: configuration du contrôle d’accès dans la définition d’hôte virtuel (par défaut)

La première option consiste à modifier la configuration Apache et à ajouter la protection par mot de passe au fichier d’hôte virtuel. Cela donnera généralement de meilleures performances car cela évite les dépenses de lecture de fichiers de configuration distribués. Cette option nécessite un accès à la configuration, qui n’est pas toujours disponible, mais lorsque vous y avez accès, cela est recommandé.

Commencez par ouvrir le fichier hôte virtuel auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous allons utiliser le fichier + 000-default.conf + qui contient l’hôte virtuel par défaut installé via le paquet apache d’Ubuntu:

sudo nano /etc/apache2/sites-enabled/

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

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

L’authentification est effectuée répertoire par répertoire. Pour configurer l’authentification, vous devez cibler le répertoire que vous souhaitez restreindre avec un bloc + <Directory _> +. Dans notre exemple, nous restreindrons la totalité de la racine du document, mais vous pouvez modifier cette liste pour ne cibler qu’un répertoire spécifique de l’espace Web:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined



</VirtualHost>

Dans ce bloc d’annuaire, indiquez que vous souhaitez configurer l’authentification + Basic +. Pour le + AuthName +, choisissez un nom de domaine qui sera affiché à l’utilisateur lorsqu’il demandera des informations d’identification. Utilisez la directive + AuthUserFile + pour diriger Apache vers le fichier de mot de passe que nous avons créé. Enfin, nous aurons besoin d’un + valid-user + pour accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée dans:

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined

 <Directory "/var/www/html">




 </Directory>
</VirtualHost>

Enregistrez et fermez le fichier lorsque vous avez terminé.

Avant de redémarrer le serveur Web, vous pouvez vérifier la configuration avec la commande suivante:

sudo apache2ctl configtest

Si tout se passe bien et que vous obtenez + Syntax OK +, redémarrez le serveur pour mettre en œuvre votre stratégie de mot de passe. Puisque + systemctl + n’affiche pas le résultat de toutes les commandes de gestion de service, nous utiliserons le + status + pour nous assurer que le serveur est en cours d’exécution:

sudo systemctl restart apache2
sudo systemctl status apache2

Maintenant, le répertoire que vous avez spécifié devrait maintenant être protégé par mot de passe.

Option 2: Configuration du contrôle d’accès avec les fichiers .htaccess

Apache peut utiliser les fichiers + .htaccess + afin de permettre à certains éléments de configuration d’être définis dans un répertoire de contenu. Étant donné qu’Apache doit relire ces fichiers à chaque requête impliquant le répertoire, ce qui peut avoir un impact négatif sur les performances, l’option 1 est préférable, mais si vous utilisez déjà un fichier .htaccess ou si vous devez autoriser les utilisateurs non root à gérer les restrictions, Les fichiers + .htaccess + `ont du sens.

Pour activer la protection par mot de passe à l’aide des fichiers + .htaccess +, ouvrez le fichier de configuration principal d’Apache:

sudo nano /etc/apache2/apache2.conf

Recherchez le bloc + <Directory> + pour le répertoire + / var / www + qui contient la racine du document. Activez le traitement + .htaccess + en remplaçant la directive + AllowOverride + de ce bloc de «Aucune» par «Tout»:

/etc/apache2/apache2.conf

. . .

<Directory /var/www/>
 Options Indexes FollowSymLinks
 AllowOverride
 Require all granted
</Directory>

. . .

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, nous devons ajouter un fichier + .htaccess + au répertoire que nous souhaitons restreindre. Dans notre démonstration, nous restreindrons la totalité du répertoire du document (le site Web entier), qui est basé sur + / var / www / html +, mais vous pouvez placer ce fichier dans n’importe quel répertoire dans lequel vous souhaitez restreindre l’accès:

sudo nano /var/www/html/.htaccess

Dans ce fichier, indiquez que vous souhaitez configurer l’authentification + Basic +. Pour le + AuthName +, choisissez un nom de domaine qui sera affiché à l’utilisateur lorsqu’il demandera des informations d’identification. Utilisez la directive + AuthUserFile + pour diriger Apache vers le fichier de mot de passe que nous avons créé. Enfin, nous aurons besoin d’un + valid-user + pour accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée dans:

/var/www/html/.htaccess

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Enregistrez et fermez le fichier. Redémarrez le serveur Web pour protéger par mot de passe tout le contenu du répertoire situé sous le répertoire + .htaccess + et utilisez + systemctl status + pour vérifier le succès du redémarrage:

sudo systemctl restart apache2
sudo systemctl status apache2

Étape 4 - Confirmation de 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/apache_password_1404/password_prompt.png [Invite de mot de passe Apache2]

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 «Non autorisé» s’affiche:

image: https: //assets.digitalocean.com/articles/apache_password_1404/unauthorized_error.png [erreur non autorisée Apache2]

Conclusion

Toutes nos félicitations! Si vous avez suivi, vous avez maintenant configuré l’authentification de base pour votre site. La configuration d’Apache et .htaccess peuvent toutefois faire beaucoup plus que l’authentification de base. Pour en savoir plus sur la flexibilité et la puissance disponibles dans la configuration d’Apache, essayez l’un de ces didacticiels: