Auteur : Didier Misson
• 28 novembre 2007

Sur un serveur Debian ou Ubuntu, il suffit d’une installation du package Apache2 pour qu’il fonctionne “out-of-the-box”. :-)

Mais il est possible d’améliorer la sécurité en ne laissant pas certaines données, fichiers, répertoires, accessible à un éventuel attaquant.

Je me baserai sur ces articles :

Je remercie les auteurs de ces articles respectifs qui m’ont été d’une grande aide. ;-)

Je rappelle que, bien que je fasse mes essais sur un serveur Ubuntu 7.10, la grosse majorité de ces configurations et installations devraient fonctionner, ou être directement adaptables, sur toute distribution. ;-)

Puisque mon serveur Ubuntu / Apache2 n’est pas encore accessible sur le Web (je n’ouvrirai les ports dans le modem/routeur, qu’une fois terminé sa configuration et sécurisation), je peux me bricoler un petit site web avec n’importe quoi me permettant de vérifier si la sécurité est ok.

L’accès aux fichiers et aux dossiers :

Si on ne pense pas à cela, on risque de laisser simplement accès à des fichiers qui ne devraient pas l’être… privés ou qui posent un problème niveau sécurité.

La liste des fichiers, ou index :

Je me suis créé un dossier photos.
Évidemment, ce ne sont que des photos, et il est même pratique d’en afficher la liste… mais pour d’autres dossiers, les risques seraient plus sérieux !

En tapant simplement l’adresse du dossier dans le navigateur http://192.168.1.200/photo/Fest-21.07.04/, j’affiche ceci :

Index of /photo/Fest-21.07.04

[ICO] Name Last modified Size Description

[DIR] Parent Directory   -
[IMG] IMG_0001.JPG 23-Jul-2004 00:00 696K
[IMG] IMG_0002.JPG 23-Jul-2004 00:00 661K
[IMG] IMG_0003.JPG 23-Jul-2004 00:00 712K
[IMG] IMG_0004.JPG 23-Jul-2004 00:00 593K

Il est possible d’interdire que certains fichiers avec un nom ou une extension précise, n’apparaissent dans l’index.

Pour cela, ajouter ce genre de ligne dans le fichier de configuration d’Apache 2 : sudo vi /etc/apache2/apache2.conf

IndexIgnore .htaccess IndexIgnore .??* *~ *# HEADER* README* bak BAK RCS CVS *,v *,t IndexIgnore *.inc

Cela va interdire que les fichiers “.htacces”, “README”, “bak”, “RCS”, “CVS”, “.inc” n’apparaissent dans les index.

Les .htaccess contrôlant la sécurité d’accès à votre dossier, c’est normal (noté qu’ils sont de toute façon bloqués d’une autre façon).

Les autres fichiers sont risqués (inclusion, cvs qui peut révéler des sources, bak qui permettrait peut-être d’afficher des backups de vos programmes ou configuration…).

Pour essais, j’ajoute cette ligne dans le fichier de configuration :

IndexIgnore IMG_0002.*

Récharger les paramètres d’Apache 2 :

sudo /etc/init.d/apache2 reload

Et le même index ne montre maintenant plus le fichier “IMG_0002.JPG”.

Index of /photo/Fest-21.07.04

[ICO] Name Last modified Size Description

[DIR] Parent Directory   -
[IMG] IMG_0001.JPG 23-Jul-2004 00:00 696K
[IMG] IMG_0003.JPG 23-Jul-2004 00:00 712K
[IMG] IMG_0004.JPG 23-Jul-2004 00:00 593K

Vous pouvez ainsi interdire que n’importe quel fichier soit dans un index (même si cela a peu d’intéret pour une photo).

Mais attention, s’il n’est plus dans l’index, ce fichier est toujours accessible par son URL complète dans un navigateur ou un “wget” :
http://192.168.168.251/photo/Fest-21.07.04/IMG_0002.JPG

Je remet uniquement les “IndexIgnore” cités plus haut.

Comment interdire l’accès à certains types de fichiers (et pas seulement dans l’index) :

Par défaut, l’installation d’Apache dans votre distribution a certainement déjà bloqué l’accès aux fichiers “.htaccess”.

Vous trouverez ces lignes dans le fichier de configuration d’Apache 2 :

< Files ~ "^\.ht" >     Order allow,deny     Deny from all < /Files >

(J’ai intercalé des blancs dans la balise “Files” sinon elle était interprétée et ne s’affichait pas correctement)

Si vous voulez par exemple bloquer l’accès aux fichiers avec l’extension “.inc” (des inclusions en PHP) :

< Files ~ "\.inc$" > Order allow,deny Deny from all < /Files >

Pour continuer mes essais, je vais inclure ceci :

< Files ~ "\.JPG$" > Order allow,deny Deny from all < /Files >

Toujours faire un reload d’Apache 2.

Et maintenant mon index photos est vide puisque uniquement constitué d’images “.JPG”.

De la même manière que vous pouvez interdire l’accès à un fichier précis, vous pouvez bloquer l’accès à un dossier complet.

Je me créé un dossier “perso” dans mon dossier photo :

:/var/www/azemel/photo/Fest-21.07.04$ sudo mkdir perso

Je vois effectivement ce fichier dans Firefox, dans l’index du dossier photo/Fest-21.07.04.

Il suffit d’ajouter ces lignes dans leur contexte approprié (soit dans mon cas dans la configuration globale, ou vhost/directory, ou dans un .htaccess) :

sudo vi /etc/apache2/apache2.conf
< Directory ~ "perso"> Order allow,deny Deny from all < /Directory>

Evidemment je reload Apache2 :

sudo /etc/init.d/apache2 reload

Et voilà, je ne vois plus le dossier “perso” dans mon index.

Si j’essaye d’y accéder directement en tapant l’URL complète :

http://192.168.168.251/azemel/photo/Fest-21.07.04/perso

J’obtiens le message d’erreur :

Forbidden

You don’t have permission to access /azemel/photo/Fest-21.07.04/perso on this server.
Apache Server at 192.168.168.251 Port 80

Donc, l’existence du dossier n’est pas cachée, mais l’accès est interdit.

Catégorie: Serveurs | Tags : , ,
Vous pouvez suivre toutes les réponses à à ce billet via le flux RSS 2.0. Les commentaires et la notification par ping sont désactivés.

Les commentaires sont désactivés.