En tant qu’administrateur web, vous pouvez trouver utile de restreindre certaines parties d’un site web aux visiteurs, que ce soit de manière temporaire ou permanente. Si les apps web peuvent fournir leurs propres méthodes d’authentification et d’autorisation, vous pouvez également compter sur le serveur web lui-même pour restreindre l’accès si celles-ci sont inadéquates ou indisponibles.
Ce tutoriel vous guidera à travers les ressources de protection par mot de passe sur un serveur web Apache fonctionnant sous Ubuntu 18.04 afin de fournir à votre serveur une sécurité supplémentaire.
Afin de suivre ce tutoriel, vous devez avoir accès à un serveur Ubuntu 18.04.
De plus, vous aurez besoin de la configuration suivante pour pouvoir commencer :
Un utilisateur sudo
sur votre serveur : Vous pouvez créer un utilisateur avec des privilèges sudo
en suivant le guide de configuration initiale du serveur Ubuntu 18.04.
Un serveur web Apache2 : Si vous n’en avez pas encore mis en place, le tutoriel « Comment installer le serveur web Apache sur Ubuntu 18.04 » peut vous guider
Un site sécurisé par SSL : la manière dont vous le configurez dépend de la présence ou non d’un nom de domaine pour votre site.
Lorsque tous ces éléments sont en place, connectez-vous à votre serveur en tant qu’utilisateur sudo
et continuez ci-dessous.
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
Ceci étant installé, nous avons maintenant accès à la commande htpasswd
.
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
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
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
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.
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.
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
À l’intérieur, les commentaires étant dépouillés, le dossier devrait ressembler à celui-ci :
<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 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 :
<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>
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 :
<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>
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
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
Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.
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
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
:
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
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
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 :
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 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
Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.
Pour confirmer que votre contenu est protégé, essayez d’accéder à votre contenu protégé dans un navigateur web. Un nom d’utilisateur et un mot de passe devraient vous être demandés, sous la forme suivante
Si vous saisissez les identifiants corrects, vous serez autorisé à accéder au contenu. Si vous saisissez des identifiants erronés ou si vous cliquez sur « Annuler », vous verrez apparaître la page d’erreur « Non autorisé » :
Félicitations. Si vous avez suivi ces étapes, vous avez maintenant mis en place une authentification de base pour votre site.
Vous pouvez faire beaucoup plus avec la configuration d’Apache et le .htaccess
. Pour en savoir plus sur la flexibilité et la puissance disponibles dans la configuration d’Apache, essayez l’un de ces tutoriels :
Pour une meilleure compréhension du fichier de configuration principal, lisez la section sur la familiarisation avec les fichiers et répertoires importants d’Apache dans notre guide d’installation d’Apache.
Pour en savoir plus sur les fichiers d’hôtes virtuels, voir Comment configurer les hôtes virtuels Apache sur Ubuntu 16.04
Apprenez à réécrire les URL, à personnaliser les pages d’erreur comme le message « Non autorisé » ci-dessus, ou à inclure des éléments communs sur toutes vos pages avec les Server Side Includes dans notre guide How To Use the .htaccess File.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!