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:
-
* Un utilisateur
+ sudo +
sur votre serveur *: Vous pouvez créer un utilisateur avec les privilèges+ sudo +
en suivant les https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu- 16-04 [Guide de configuration initiale du serveur Ubuntu 16.04]. -
* Un serveur Web Apache2 *: Si vous n’en avez pas encore configuré, la section Apache de l’article de fond, https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache -mysql-php-lamp-stack-on-ubuntu-16-04 [Comment installer des piles Linux, Apache, MySQL, PHP (LAMP) sur Ubuntu 16.04
], peut vous guider. -
* Un site sécurisé avec SSL *: La manière dont vous configurez cela dépend de si vous avez un nom de domaine pour votre site.
-
* Si vous avez un nom de domaine… * le moyen le plus simple de sécuriser votre site est avec Let’s Encrypt, qui fournit des certificats gratuits et sécurisés. Suivez le Le guide Encrypt pour Apache pour le configurer. .
-
* Si vous n’avez pas de domaine… * et que vous utilisez simplement cette configuration à des fins de test ou pour un usage personnel, vous pouvez utiliser un certificat auto-signé. Ceci fournit le même type de cryptage, mais sans la validation du domaine. Suivez le https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 de votre propre signature SSL pour Apache] pour se mettre en place.
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:
-
Pour une meilleure compréhension du fichier contenant le fichier de configuration principal, voir https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debian -vps [Comment configurer le serveur Web Apache sur un serveur Ubuntu ou Debian VPS
] -
Pour en savoir plus sur les fichiers hôtes virtuels, consultez la page Comment configurer Apache Virtual Hôtes sur Ubuntu 16.04
-
En savoir plus sur la réécriture d’URL, la personnalisation de pages d’erreur telles que le message «Unauthorized» ci-dessus, ou l’inclusion d’éléments communs sur toutes vos pages avec Server Side Includes dans notre guide https://www.digitalocean.com/community/tutorials/how-to-use -the-htaccess-file [Comment utiliser le fichier .htaccess].