- Introduction
- Prérequis
- Installer le paquet d’utilitaires Apache
- Créer le fichier de mots de passe
- Configurer l’authentification par mot de passe d’Apache
- Configuration du contrôle d’accès dans la définition de l’hôte virtuel
- Configuration du contrôle d’accès avec les fichiers .htaccess
- Confirmer l’authentification par mot de passe
- Conclusion
Introduction
Lors de la configuration d’un serveur web, il y a souvent des sections du site auxquelles vous souhaitez restreindre l’accès. 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 si celles-ci sont inadéquates ou indisponibles.
Dans ce guide, nous allons démontrer comment protéger par mot de passe les actifs sur un serveur web Apache fonctionnant sur Ubuntu 14.04.
Prérequis
Pour commencer, vous aurez besoin d’un accès à un environnement de serveur Ubuntu 14.04. Vous aurez besoin d’un utilisateur non-root avec des privilèges sudo
afin d’effectuer des tâches administratives. Pour savoir comment créer un tel utilisateur, suivez notre guide de configuration initiale du serveur Ubuntu 14.04.
Installer le paquet d’utilitaires Apache
Afin de créer le fichier qui stockera les mots de passe nécessaires pour accéder à notre contenu restreint, nous utiliserons un utilitaire appelé htpasswd
. Celui-ci se trouve dans le paquet apache2-utils
au sein des dépôts Ubuntu.
Mettre à jour le cache local des paquets et installer le paquet en tapant cette commande. Nous en profiterons pour saisir également le serveur Apache2 au cas où il ne serait pas encore installé sur le serveur:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Créer le fichier de mots de passe
Nous avons maintenant accès à la commande htpasswd
. Nous pouvons l’utiliser pour 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 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 l’argument -c
pour tout utilisateur supplémentaire que vous souhaitez ajouter:
- sudo htpasswd /etc/apache2/.htpasswd another_user
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$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configurer l’authentification par mot de passe d’Apache
Maintenant que nous avons un fichier avec nos utilisateurs et nos mots de passe dans un format qu’Apache peut lire, nous devons configurer Apache pour vérifier ce fichier avant de servir notre contenu protégé. Nous pouvons le faire de deux façons différentes.
La première option consiste à modifier la configuration d’Apache et à ajouter notre 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 liées à la lecture des fichiers de configuration distribués. Si vous avez cette option, cette méthode est recommandée.
Si vous n’avez pas la possibilité de modifier le fichier d’hôte virtuel (ou si vous utilisez déjà les fichiers .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` afin de permettre à certains éléments de configuration d’être définis dans un fichier dans un répertoire de contenu. L’inconvénient est qu’Apache doit relire ces fichiers à chaque requête qui implique le répertoire, ce qui peut avoir un impact sur les performances.
Choisissez l’option qui correspond le mieux à vos besoins ci-dessous.
Configuration du contrôle d’accès dans la définition de l’hôte virtuel
Commencez par ouvrir le fichier d’hôte virtuel auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous utiliserons 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/000-default.conf
À l’intérieur, avec les commentaires dépouillés, le fichier devrait ressembler à ceci :
<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 sur une base par répertoire. Pour configurer l’authentification, vous devrez cibler le répertoire que vous souhaitez restreindre avec un bloc <Directory ___>
. Dans notre exemple, nous allons restreindre l’ensemble de la racine du document, mais vous pouvez modifier ce listing 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, spécifiez que nous souhaitons mettre en place l’authentification Basic
. Pour la directive AuthName
, choisissez un nom de royaume qui sera affiché à l’utilisateur lors de la demande d’informations d’identification. Utilisez la directive AuthUserFile
pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous exigerons 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 à y accéder :
<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é. Redémarrez Apache pour mettre en œuvre votre politique de mot de passe :
- sudo service apache2 restart
Le répertoire que vous avez spécifié devrait maintenant être protégé par mot de passe.
Configuration du contrôle d’accès avec les fichiers .htaccess
Si vous souhaitez mettre en place une protection par mot de passe en utilisant plutôt des fichiers .htaccess
, vous devez commencer par modifier le fichier de configuration principal d’Apache pour autoriser les fichiers .htaccess
:
- 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 changeant la directive AllowOverride
de 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é.
Puis, nous devons ajouter un fichier .htaccess
au répertoire que nous souhaitons restreindre. Dans notre démonstration, nous restreindrons toute la racine du document (l’ensemble du site web) qui est basée à /var/www/html
, mais vous pouvez placer ce fichier dans n’importe quel répertoire dont vous souhaitez restreindre l’accès :
- sudo nano /var/www/html/.htaccess
Dans ce fichier, spécifiez que nous souhaitons mettre en place l’authentification Basic
. Pour la directive AuthName
, choisissez un nom de royaume qui sera affiché à l’utilisateur lors de la demande d’informations d’identification. Utilisez la directive AuthUserFile
pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous exigerons un valid-user
pour accéder à cette ressource, ce qui signifie que toute personne qui peut vérifier son identité avec un mot de passe sera autorisée à entrer :
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Enregistrer et fermer le fichier. Redémarrez le serveur Web pour protéger par mot de passe tout le contenu dans ou sous le répertoire avec le fichier .htaccess
:
- sudo service apache2 restart
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 être présenté avec une invite de nom d’utilisateur et de mot de passe qui ressemble à ceci:
Si vous entrez les informations d’identification correctes, vous serez autorisé à accéder au contenu. Si vous entrez les mauvaises informations d’identification ou appuyez sur « Annuler », vous verrez la page d’erreur « Non autorisé »:
Conclusion
Vous devriez maintenant avoir tout ce dont vous avez besoin pour configurer l’authentification de base pour votre site. Gardez à l’esprit que la protection par mot de passe doit être associée à un cryptage SSL afin que vos informations d’identification ne soient pas envoyées au serveur en texte clair. Pour savoir comment créer un certificat SSL auto-signé à utiliser avec Apache, suivez ce guide. Pour savoir comment installer un certificat commercial, suivez ce guide.