On va voir dans cet article comment protéger l’accès à une page web (phpsysinfo par exemple) par mot de passe, car toutes les interfaces web n’ont pas toujours de fonction native pour protéger l’accès.
On va utiliser une authentification Digest qui permettra de sécuriser la connexion le temps de l’échange de l'identifiant et du mot de passe, contrairement à l’authentification Basic qui laisse passer le mot de passe en clair.
Tout d’abord, il faut activer le module Digest d’Apache si ce n’est déjà fait. Pour l’activer, tapez la commande
a2enmod auth_digest
Maintent que le module est activé, on va créer un fichier Digest dans /etc/apache2 à l’aide de la commande htdigest (j’ai mis le fichier dans /etc/apache2 mais vous pouvez le mettre dans n’importe quel répertoire lisible par Apache).
La commande pour créer le fichier Digest est la suivante :
htdigest -c /etc/apache2/passwords Realm Username
/!\Si dans le futur vous avez besoin de créer d’autres utilisateurs, il suffira de taper la même commande mais sans le “-c”. Ca rajoutera le nouvel utilisateur à la suite dans le fichier. Si vous laissez le “-c”, la commande va écrire un nouveau fichier.
Après avoir tapé la commande, un mot de passe vous sera demandé.
Maintenant que notre fichier htdigest est créé, il faut dire à Apache de l’utiliser.
Allez dans le répertoire /etc/apache2/sites-enabled/ et ouvrez votre fichier de configuration Apache. (/var/www/phpsysinfo par exemple)
Petite parenthèse. Si le répertoire que vous voulez protéger ne se trouve pas dans le DocumentRoot indiqué dans le fichierde config, il faudra utiliser un Alias. Il vous suffit de rajouter la ligne
Alias /nomdel'alias répertoiredel'alias
Ca donnerait par exemple
Alias /phpsysinfo /var/www/phpsysinfo
. Il faut que l'utilisateur Apache ait accès à ce répertoire également. Fin de la parenthèse.
Ajoutez les lignes suivantes dans votre virtualhost pour protéger l'accès à tout le site :
<Location /> AuthType Digest AuthName "Realm" AuthDigestDomain /var/www/ https://www.exemple.fr AuthDigestProvider file AuthUserFile /etc/apache2/passwords Require valid-user </Location>
Si vous souhaitez protéger que l'accès à une page en particulier, rajoutez le chemin dans “Location” comme suit
<Location /phpsysinfo> AuthType Digest AuthName "Realm" AuthDigestDomain /var/www/phpsysinfo/ https://www.exmple.fr/phpsysinfo AuthDigestProvider file AuthUserFile /etc/apache2/passwords Require valid-user </Location>
Quelques infos sur ce bloc :
Il vous reste plus qu’à sauvegarder et à redémarrer Apache.
Maintenant quand vous allez rentrer l’adresse de l’interface web ou du répertoire à protéger, une fenêtre de connexion apparaîtra.
Si tout a fonctionné, en rentrant l’utilisateur et le mot de passe configuré plus haut, vous aurez accès au contenu.
Dans mon cas, toutes les connexions http sont redirigées vers le https, donc je n’ajoute la protection que dans le vhost du port 443. Si vous ne redirigez pas les connexions http vers https l’interface sera sans aucune protection quand on y accède en http.