Étape 1 – Installez le paquet d’utilitaires Apache
Commençons par mettre à jour notre serveur et installer un paquet dont nous aurons besoin. Dans le cadre de ce tutoriel, nous utiliserons un utilitaire appelé htpasswd
, qui fait partie du paquet apache2-utils
, afin de 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 update
sudo apt install apache2-utils
Copy
Ceci étant installé, nous avons maintenant accès à la commande htpasswd
.
Étape 2 – Créez le fichier de mots de passe
La commande htpasswd
nous permettra de créer un fichier de mots de passe qu’Apache pourra utiliser 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 de mots de passe 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 sammy
Copy
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 afin de ne pas écraser les données du fichier :
sudo htpasswd /etc/apache2/.htpasswd another_user
Copy
Si l’on consulte le contenu du dossier, on peut voir le nom d’utilisateur et le mot de passe crypté de chaque enregistrement :
cat /etc/apache2/.htpasswd
Copy
Outputsammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1
Nous avons maintenant nos utilisateurs et nos mots de passe dans un format qu’Apache peut lire.
Étape 3 – Configurez l’authentification par mot de passe Apache
Dans cette étape, nous devons configurer Apache pour qu’il vérifie ce fichier avant de servir notre contenu protégé. Nous pouvons le faire de deux manières : soit directement dans le fichier d’hôte virtuel d’un site, soit en plaçant des fichiers .htaccess
dans les répertoires qui doivent faire l’objet d’une restriction d’accès. Il est généralement préférable d’utiliser le fichier d’hôte virtuel, mais si vous devez permettre à des utilisateurs non root de gérer leurs propres restrictions d’accès, vérifier les restrictions dans le contrôle de version à côté du site web, ou si vous avez déjà une application web utilisant des fichiers .htaccess
à d’autres fins, envisagez la deuxième option.
Choisissez l’option qui répond le mieux à vos besoins.
Option 1 : Configuration du contrôle d’accès dans la définition de l’hôte virtuel (recommandé)
La première option consiste à modifier la configuration d’Apache et à ajouter la protection par mot de passe au fichier de l’hôte virtuel. Cela donne généralement de meilleures performances car cela évite les dépenses liées à la lecture des 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, elle est recommandée.
Commencez par ouvrir le fichier d’hôte virtuel auquel vous souhaitez ajouter une restriction d’accès. Pour notre exemple, nous utiliserons le fichier default-ssl.conf
qui contient l’hôte virtuel par défaut installé par le biais du paquet Apache d’Ubuntu. Ouvrez le fichier avec un éditeur de texte en ligne de commande tel que nano :
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
Copy
À l’intérieur, les commentaires étant dépouillés, le dossier devrait ressembler à celui-ci :/etc/apache2/sites-enabled/default-ssl.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Copy
L’authentification se fait par répertoire. Pour mettre en place l’authentification, vous devrez cibler le répertoire dont vous souhaitez restreindre l’accès avec un bloc <Directory ___>
. Dans notre exemple, nous allons restreindre la racine (ou root) entière du document, mais vous pouvez modifier cette liste pour ne cibler qu’un répertoire spécifique dans l’espace web :/etc/apache2/sites-enabled/default-ssl.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>
Copy
Dans ce bloc répertoire, précisez que nous mettons en place l’authentification de base
. Pour l'AuthName
, choisissez un nom de domaine qui sera affiché à l’utilisateur lors de la demande des identifiants. Utilisez la directive AuthUserFile
pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, exigez que seul un utilisateur valide
puisse accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité à l’aide d’un mot de passe sera autorisée à entrer :/etc/apache2/sites-enabled/default-ssl.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">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Copy
Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X
suivi de Y
puis ENTER.
Avant de redémarrer le serveur web, vous pouvez vérifier la configuration à l’aide de la commande suivante :
sudo apache2ctl configtest
Copy
Si tout se passe bien et que vous obtenez Syntax OK
en sortie, vous pouvez redémarrer le serveur pour mettre en œuvre votre politique de mots de passe. Comme systemctl
n’affiche pas le résultat de toutes les commandes de gestion des services, nous utiliserons le status
pour nous assurer que le serveur fonctionne :
sudo systemctl restart apache2
sudo systemctl status apache2
Copy
Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.
Option 2 : Configuration du contrôle d’accès avec des fichiers .htaccess
Apache peut utiliser des 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à le fichier .htaccess
ou si vous devez autoriser des utilisateurs non root à gérer les restrictions, les fichiers .htaccess
sont intéressants.
Pour activer la protection par mot de passe à l’aide de fichiers .htaccess
, ouvrez le fichier de configuration principal d’Apache avec un éditeur de texte en ligne de commande tel que nano :
sudo nano /etc/apache2/apache2.conf
Copy
Trouvez le bloc <Directory>
pour le répertoire /var/www
qui contient la racine (ou root) du document. Activez le traitement .htaccess
en faisant passer la directive AllowOverride
dans ce bloc de None
à All
:/etc/apache2/apache2.conf
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Copy
Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X
suivi de Y
puis ENTER.
Ensuite, nous devons ajouter un .htaccess
au répertoire dont nous souhaitons restreindre l’accès. Dans notre démonstration, nous allons restreindre l’ensemble de la racine (ou root) du document (tout le site web) qui se trouve dans /var/www/html
, mais vous pouvez placer ce fichier dans n’importe quel répertoire pour lequel vous souhaitez restreindre l’accès :
sudo nano /var/www/html/.htaccess
Copy
Dans ce fichier, précisez que nous souhaitons mettre en place une authentification de base
. Pour l'AuthName
, choisissez un nom de domaine qui sera affiché à l’utilisateur lors de la demande des identifiants. Utilisez la directive AuthUserFile
pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous aurons besoin d’un utilisateur valide
pour accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée à entrer :/var/www/html/.htaccess
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Copy
Enregistrez et fermez le fichier. Redémarrez le serveur web pour protéger par mot de passe tout le contenu situé dans le répertoire ou en dessous avec le fichier .htaccess
et utilisez systemctl status
pour vérifier le succès du redémarrage :
sudo systemctl restart apache2
sudo systemctl status apache2
Copy
Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.