Comment configurer l’authentification par mot de passe avec Apache sur Ubuntu 14.04

introduction

Lors de la configuration d'un serveur Web, vous souhaitez souvent limiter l'accès à certaines sections du site. 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 s'il est inadéquat ou indisponible.

Dans ce guide, nous expliquerons comment protéger par mot de passe les ressources d’un serveur Web Apache exécuté sous Ubuntu 14.04.

Conditions préalables

Pour commencer, vous devez accéder à un environnement de serveur Ubuntu 14.04. Vous aurez besoin d'un utilisateur non root avec les privilègessudo pour effectuer les tâches administratives. Pour savoir comment créer un tel utilisateur, suivez nosUbuntu 14.04 initial server setup guide.

Installer le paquet Apache Utilities

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. Cela se trouve dans le packageapache2-utils dans les référentiels Ubuntu.

Mettez à jour le cache de package local et installez le package en tapant cette commande. Nous en profiterons pour saisir également le serveur Apache2 s'il n'est pas encore installé sur le serveur:

sudo apt-get update
sudo apt-get install apache2 apache2-utils

Créer le fichier de mot de passe

Nous avons maintenant accès à la commandehtpasswd. Nous pouvons l'utiliser pour créer un fichier de mots 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 sammy

Il vous sera demandé de fournir et de confirmer un mot de passe pour l'utilisateur.

Laissez de côté l'argument-c 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
Outputsammy:$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 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é. Nous pouvons le faire de deux manières différentes.

La première option consiste à modifier la configuration 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 de 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 hôte virtuel (ou si vous utilisez déjà.htaccess files for other purposes), you can restrict access using an.htaccess`file. Apache utilise les fichiers.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 que 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 convient 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 hôte virtuel auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous utiliserons le fichier000-default.conf qui contient l'hôte virtuel par défaut installé via le package apache d'Ubuntu:

sudo nano /etc/apache2/sites-enabled/000-default.conf

A l'intérieur, avec les commentaires dépouillés, le fichier devrait ressembler à ceci:

/etc/apache2/sites-enabled/000-default.conf


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

L'authentification est effectuée répertoire 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 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


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    
    

Dans ce bloc de répertoire, spécifiez que nous souhaitons configurer l'authentificationBasic. Pour lesAuthName, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez la directiveAuthUserFile pour pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous aurons besoin d'unvalid-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


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    

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é doit maintenant être protégé par 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 les fichiers.htaccess à la place, vous devez commencer par éditer le fichier de configuration Apache principal 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 de.htaccess en modifiant la directiveAllowOverride dans ce bloc de «Aucun» à «Tous»:

/etc/apache2/apache2.conf

. . .


    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted


. . .

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 limiterons la racine entière du document (le site Web entier) qui est basé à/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, spécifiez que nous souhaitons configurer l'authentificationBasic. Pour lesAuthName, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez la directiveAuthUserFile pour pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous aurons besoin d'unvalid-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 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 recevoir un nom d'utilisateur et un mot de passe qui ressemblent à ceci:

Apache2 password prompt

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:

Apache2 unauthorized error

Conclusion

Vous devriez maintenant avoir tout ce dont vous avez besoin pour configurer l’authentification de base pour votre site. N'oubliez pas que la protection par mot de passe doit être associée au cryptage SSL afin que vos informations d'identification ne soient pas envoyées au serveur en texte brut. Pour savoir comment créer un certificat SSL auto-signé à utiliser avec Apache, suivezthis guide. Pour savoir comment installer un certificat commercial, suivezthis guide.