Apache : Comment afficher la liste d'un répertoire

Pour afficher une liste de fichiers et de sous-répertoires dans un répertoire sur le serveur HTTP Apache, définissez Options +Indexes dans ce répertoire. La liste est générée lorsque les permissions d'accès sont accordées, qu'aucun fichier index par défaut n'existe et que mod_autoindex est activé.

Conditions dans lesquelles la liste est affichée

Lorsqu'une URL de répertoire est demandée dans Apache 2.4, il recherche d'abord les fichiers spécifiés dans DirectoryIndex. Par exemple, si index.html existe, ce fichier est généralement affiché. Si le fichier n'existe pas et que Indexes est activé, mod_autoindex peut créer la liste. Pour un comportement détaillé, consultez la description DirectoryIndex d'Apache et la documentation mod_autoindex.

Les paramètres de liste ne confèrent pas de permissions d'accès. Les répertoires dont l'accès est refusé ou les chemins que Apache ne peut pas lire n'afficheront pas de liste. De plus, un 403 Forbidden peut survenir pour diverses raisons, comme l'authentification ou les permissions du système de fichiers, donc vous ne devez pas activer la liste simplement parce qu'un 403 apparaît.

Vérifiez avant de configurer

  • Préparez un répertoire dédié où les listes et fichiers peuvent être rendus publics. Ne mettez pas de matériels qui ne devraient pas être publics, comme les fichiers de configuration, les sauvegardes ou les informations personnelles.
  • Confirmez l'hôte virtuel du site à configurer et le chemin réel du fichier. L'exemple ci-dessous est pour Ubuntu Apache 2.4 lorsque la racine du document du site est /var/www/html et que le répertoire public est downloads en dessous. Remplacez par le chemin et l'URL réels de l'environnement.
  • Sauvegardez les paramètres existants et confirmez que vous avez la permission de gérer le site et de recharger Apache. Si c'est un serveur de production, vérifiez d'abord dans un environnement de test.

Même si les fichiers n'apparaissent pas dans la liste, ils peuvent être accessibles si vous connaissez directement l'URL du fichier. Masquer les noms dans la liste n'est pas un substitut aux permissions qui bloquent l'accès aux fichiers.

Appliquer à un répertoire spécifique dans l'hôte virtuel

Sur Ubuntu, la configuration du site actif se trouve généralement dans un fichier sous /etc/apache2/sites-available/. Ajoutez le bloc suivant à la configuration de l'hôte virtuel du site ou modifiez la configuration de chemin existante. Ne donnez pas imprudemment des autorisations publiques aux répertoires qui ont déjà des restrictions d'accès.

<Directory "/var/www/html/downloads">
    Options +Indexes
    Require all granted
</Directory>

Options +Indexes active l'affichage du contenu du répertoire parmi les options héritées. Require all granted permet l'accès à ce chemin, il ne doit donc être utilisé que dans des répertoires destinés à être publics. La portée réelle de l'application peut varier en fonction d'autres sections de configuration ou des paramètres de sous-répertoires. Vous pouvez vérifier les règles d'héritage et de fusion des options dans la directive Apache Options.

Après avoir enregistré la configuration, vérifiez la syntaxe sur Ubuntu. Si Syntax OK est affiché, rechargez la configuration. En cas d'erreurs, corrigez le chemin et les fautes de frappe, et ne rechargez pas tant que la vérification n'est pas réussie.

sudo apache2ctl configtest
sudo systemctl reload apache2

Les distributions autres qu'Ubuntu peuvent avoir des emplacements de fichiers de configuration et des noms de service différents. Suivez également les recommandations de cette distribution pour les commandes de vérification de syntaxe et de rechargement.

Vérification des listes de répertoires et de la portée d'accès

  1. Placez un fichier test pouvant être accessible publiquement dans le répertoire cible et assurez-vous que le fichier index spécifié n'est pas présent.
  2. Ouvrez l'URL du répertoire dans votre navigateur. Dans l'exemple ci-dessus, si l'adresse du serveur est https://example.com, https://example.com/downloads/ serait l'URL exemple. Remplacez-la par le domaine réel.
  3. Vérifiez si les fichiers test sont affichés dans la liste et ouvrez les liens pour vous assurer que la portée d'accès correspond à la configuration souhaitée. Puisque les paramètres peuvent être hérités par les sous-répertoires, examinez également la portée d'accès publique.

Si une page apparaît au lieu d’une liste, vérifiez s’il existe un fichier DirectoryIndex ou d’autres gestionnaires/redirections. S’il s’agit d’une erreur 403, vérifiez les restrictions d’accès, les permissions du répertoire et les paramètres d’index dans les journaux d’erreurs. Vous pouvez également vérifier si le module autoindex est actif en utilisant apache2ctl -M. Si le chemin est incorrect, une erreur 404 peut se produire.

Lors de l’utilisation de .htaccess

Si l’administrateur du serveur a autorisé les modifications Options dans .htaccess pour le répertoire, vous pouvez également ajouter la ligne suivante à ce fichier. Si le AllowOverride des paramètres principaux ne permet pas cette option, cela peut ne pas fonctionner ou entraîner une erreur serveur, donc confirmez avec l’administrateur.

Options +Indexes

Si vous avez accès aux paramètres du serveur, Apache recommande généralement d'utiliser le fichier de configuration principal. Vérifiez les conditions applicables dans le guide .htaccess d'Apache.

Pour arrêter l'affichage de la liste

Définissez Options -Indexes dans le chemin donné ou restaurez les paramètres d'avant vos modifications, puis vérifiez la syntaxe et rechargez Apache. Si vous l'avez ajouté à .htaccess, soit supprimez cette ligne, soit, si autorisé, changez-la en Options -Indexes. Comme des paramètres hérités peuvent exister, vérifiez à nouveau l'URL du répertoire après avoir effectué les modifications.

Désactiver simplement la liste ne bloque pas l'accès aux URLs des fichiers déjà connus. Pour protéger les fichiers eux-mêmes, appliquez des contrôles d'accès séparés et vérifiez que les utilisateurs non autorisés sont effectivement bloqués.