Apache : Protéger un répertoire web

Authentification HTTP

Sujet vu des milliers de fois sur le web, l’authentification basique HTTP est relativement simple à mettre en pratique pour qui connait un peu le serveur web Apache. Ce petit article me fait office de mémo, petite piqure de rappel, sous Fedora 10.

Configuration d’Apache

Il faut s’assurer que le serveur web Apache puisse utiliser les fichiers .htaccess. Pour ce faire, il faut lui ajouter la directive AllowOverride AuthConfig. Ceci peut se faire directement dans le httpd.conf, mais il est recommandé – et plus clair – de ne pas y toucher et d’ajouter ses propres fichiers de configurations sous /etc/httpd/conf.d/. Il est en effet plus simple d’avoir plusieurs fichiers bien nommés qu’un énorme qu’il serait fastidieux d’éditer. Dans mon cas, j’ai détaché les directives concernant /var/www du httpd.conf dans un fichier fab_docroot.conf sous /etc/httpd/conf.d/ (petite entorse à ce qui est dit plus haut de ne pas toucher au fichier principal. Mais c’est pour la bonne cause ;} ). Attention, je ne fais ceci que parce que je n’héberge qu’un seul site qui est directement sous /var/www.

Voici donc la tête des directives en question pour accepter l’authentification par .htaccess :


Options Indexes Includes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all

Sauvegarder le fichier et redémarrer Apache :

# service httpd restart

Créer un fichier .htpasswd

Ce dernier ce crée avec la commande ….. htpasswd (sans le point bien sur), facile ;} Celle-ci génére un fichier texte contenant le (ou plusieurs) nom d’utilisateur et un hash du mot de passe associé pour l’authentification HTTP.

# htpasswd -c /chemin/vers/fichier/du/mot-de-passe fabien

L’option -c crée un nouveau fichier. Pour mettre à jour un mot de passe existant, il suffit de l’enlever.

Il est conseillé de créer ce fichier en dehors de la racine des documents Apache pour que seul celui-ci puisse y avoir accès et ainsi que personne (visiteur du site) puisse le voir.
Il faut s’assurer également que l’utilisateur Apache puisse le lire pour que l’authentification fonctionne. Normalement avec Fedora, cet utilisateur s’appelle Apache, le vérifier comme suit :

# grep -e '^User' /etc/httpd/conf/httpd.conf
User apache

Changer le propriétaire et les droits :

# chown apache:apache /chemin/vers/fichier/du/mot-de-passe
# chmod 0660 /chemin/vers/fichier/du/mot-de-passe

L’utilisateur fabien est désormais ajouté. La dernière étape consiste à configurer le serveur web pour qu’il demande de s’authentifier pour un répertoire donné. Pour l’exemple, le répertoire protégé sera sous /var/www/html/secured.

Création du répertoire :

# mkdir /var/www/html/secured

Création du fichier .htaccess avec ces directives :

AuthType Basic
AuthName "Zone sécurisée"
AuthUserFile /chemin/vers/fichier/du/mot-de-passe
Require user fabien

Tester la configuration

Il suffit de se rendre à l’URI sécurisée pour voir la boîte de dialogue de demande d’un utilisateur apparaître : http://www.mon-site.net/admin


Demande d’authentification

En cas de problème, vérifier les log d’erreurs Apache :

# tail -f /var/log/httpd/error_log

4 réflexions sur « Apache : Protéger un répertoire web »

  1. Il est important de préciser que le fichier .htaccess est dans la mesure du possible à éviter, comme dit dans la documentation d’apache. L’accès protégé à un répertoire doit se faire *si on a accès à cette configuration* dans le fichier de configuration globale (ou mieux dans le fichier de conf de /etc/httpd/conf.d/).
    Tout ce qui peut être fait dans un .htaccess peut être fait dans un fichier de configuration globale d’apache. Cela évite à apache de vérifier tous les parents et donc diminue les accès disque ce qui rend la réponse plus rapide.
    (http://httpd.apache.org/docs/2.2/howto/htaccess.html#when)

    La seule raison valable pour utiliser un fichier .htaccess est quand on a pas accès à la configuration globale.

  2. “Clair ne jamais utiliser”, il ne faut pas être radical non plus, en hébergement mutualisé il n’y a pas d’accès aux fichiers de conf d’Apache par exemple.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *