SKILL LEVEL: SYSADMIN/ADVANCED - TIME: 5-10 MINS
Présentation
Dans ce didacticiel, nous allons vous montrer comment protéger un site Web, ou simplement un dossier au sein d'un site, en le protégeant par mot de passe. Nous utiliserons le serveur Web le plus populaire, Apache2 pour cet exemple, mais des méthodes similaires peuvent être utilisées avec d'autres serveurs Web.
La méthode que nous utiliserons est un système d'authentification de base, mais il est facile à configurer et vous permet de sécuriser rapidement votre site Web contre d'autres personnes sur le grand méchant Internet. Cette méthode repose sur la création d'un nom d'utilisateur et d'une combinaison de mot de passe pour votre ou vos sites. Vous pouvez ajouter autant de noms d'utilisateur que vous le souhaitez, mais n'oubliez pas que vous devrez conserver chaque mot de passe.
Prérequis
Pour cet exemple, nous utilisons l'édition serveur Ubuntu 16.04. Cela fonctionnera également sur Ubuntu 14.04 et presque toutes les autres distributions Linux, étant donné que vous utilisez le serveur Web Apache 2.
Dans Ubuntu, vous vous connectez en tant qu'utilisateur standard et utilisez sudo pour émettre des commandes root (privilégié/superutilisateur). Si vous avez une connexion root sur votre serveur, vous pouvez l'utiliser à la place. Vous n'aurez pas besoin d'utiliser sudo, mais il est recommandé pour toute administration de serveur sécurisée et sécurisée, que vous effectuiez des actions avec sudo et que vous travailliez en tant qu'utilisateur normal (non root) pour exécuter des tâches administratives.
Installer le package 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
, qui fait partie du package apache2-utils. Pour installer apache2-utils, exécutez les commandes suivantes :
sudo apt-get update
sudo apt-get install apache2-utils
Ce qui précède suppose qu'Apache2 est déjà installé (sudo apt-get install apache2, sinon).
Créer le fichier de mot de passe
Nous avons maintenant accès au htpasswd
commande. Nous pouvons l'utiliser pour créer un fichier de mots de passe qu'Apache peut utiliser pour authentifier les utilisateurs. Nous allons créer un fichier caché à cet effet nommé .htpasswd
dans notre /etc/apache2
répertoire de configuration. Notez que les fichiers précédés d'un point (.) sont automatiquement masqués dans une liste de répertoires standard (par exemple, ils ne sont pas affichés avec la commande ls). Si vous voulez les afficher, utilisez ls -la (longue liste, tous les fichiers).
La première fois que nous utilisons cet utilitaire, nous devons ajouter le -c
option 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.
Omettez le -c
argument pour tous les utilisateurs supplémentaires 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
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configurer l'authentification par mot de passe Apache
Maintenant que nous avons un fichier avec nos utilisateurs et 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 manières différentes.
La première option consiste à modifier la configuration d'Apache et à ajouter notre protection par mot de passe au fichier de l'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à des 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 impliquant 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 d'hôte virtuel
Commencez par ouvrir le fichier d'hôte virtuel auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous utiliserons le 000-default.conf
fichier contenant l'hôte virtuel par défaut installé via le package apache d'Ubuntu :
- sudo nano /etc/apache2/sites-enabled/000-default.conf
À l'intérieur, avec les commentaires supprimé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 s'effectue par répertoire. Pour mettre en place l'authentification, vous devrez cibler le répertoire que vous souhaitez restreindre avec un <Directory ___>
bloc. Dans notre exemple, nous limiterons l'intégralité de la racine 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 souhaitons mettre en place Basic
authentification. Pour le AuthName
, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez le AuthUserFile
directive pour pointer Apache vers le fichier de mots 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 à :
<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 un mot de passe.
Configuration du contrôle d'accès avec les fichiers .htaccess
Si vous souhaitez configurer la protection par mot de passe en utilisant .htaccess
à la place, vous devriez commencer par éditer le fichier de configuration principal d'Apache pour autoriser .htaccess
fichiers :
sudo nano /etc/apache2/apache2.conf
Trouvez le <Directory>
bloc pour le /var/www
répertoire contenant la racine du document. Activez .htaccess
traitement en modifiant le AllowOverride
directive dans ce bloc de "Aucun" à "Tous":
. . .
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
. . .
Enregistrez et fermez le fichier lorsque vous avez terminé.
Ensuite, nous devons ajouter un .htaccess
fichier dans le répertoire que nous souhaitons restreindre. Dans notre démonstration, nous limiterons l'intégralité de la racine du document (l'intégralité du site Web) qui est basée sur /var/www/html
, mais vous pouvez placer ce fichier dans n'importe quel répertoire auquel vous souhaitez restreindre l'accès :
sudo nano /var/www/html/.htaccess>
Dans ce fichier, précisez que nous souhaitons mettre en place Basic
authentification. Pour le AuthName
, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez le AuthUserFile
directive pour pointer Apache vers le fichier de mots 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 à :
/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 dans ou sous le répertoire avec le .htaccess
fichier :
- redémarrage du service sudo apache2
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. Toutes les protections par mot de passe doivent être combinées avec le cryptage SSL afin que vos informations d'identification ne soient pas envoyées au serveur en texte brut.
Merci aux gens de digitalocean.com pour une partie du contenu de cette page. Assurez-vous de les consulter, ils ont des services d'hébergement Web impressionnants pour tous les budgets !