GNU/Linux >> Tutoriels Linux >  >> Linux

Comment protéger par mot de passe les sites Web via .htaccess

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
Sortie
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 :

/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>

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 à :

/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">
        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":

/etc/apache2/apache2.conf
. . .

<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 !


Linux
  1. Comment activer ExecCGI via le fichier .htaccess ?

  2. Comment activer ExecCGI via le fichier .htaccess ?

  3. Comment protéger par mot de passe un répertoire via cPanel

  4. Comment modifier un fichier .htaccess via le gestionnaire de fichiers cPanel ?

  5. Comment puis-je protéger par mot de passe un dossier de site Web ?

Comment protéger un fichier par mot de passe dans l'éditeur Vim

Comment protéger par mot de passe un dossier sous Linux

Comment ajouter un mot de passe pour protéger un fichier Vim sous Linux

Comment définir la page d'index de cPanel via .htaccess ?

Comment protéger GRUB avec un mot de passe sous Linux ?

Comment protéger les fichiers par mot de passe à l'aide de l'éditeur Vim dans Ubuntu