26 votes

Comment refuser au web l'accès à certains fichiers ?

Je dois faire une opération un peu étrange.

Tout d'abord, je fonctionne sous Debian, avec apache2 (qui "tourne" en tant qu'utilisateur www-data).

J'ai donc un simple fichier texte avec une extension .txt ou .ini, ou autre, peu importe.

Ces fichiers sont situés dans des sous-dossiers dont la structure est la suivante :

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar.txt

donc, le nom du fichier est toujours le même, idem pour la 'hiérarchie', il suffit de changer le nom du dossier : /nom-dossier-statique/nom-dossier-dinamyc/file-name-static.txt

Ce que je dois faire est (je pense) relativement simple : Je dois pouvoir lire ce fichier par des programmes sur le serveur (Python, php par exemple), mais si j'essaie de récupérer le contenu du fichier par broswer (en creusant l'url www.example.com/folder1/car/foobar.txt, ou via cUrl, etc.) je dois obtenir une erreur interdite, ou autre, mais ne pas accéder au fichier .

Ce serait également bien que même l'accès à ces fichiers via FTP soit "caché", ou de toute façon ne puisse pas être téléchargé (du moins ce que j'utilise avec la racine ftp et les données utilisateur).

Comment puis-je faire ?

J'ai trouvé ça en ligne, à mettre dans le fichier .htaccess :

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

Cela semble fonctionner, mais uniquement si le fichier se trouve à la racine du site (www.example.com / monfichier.txt), et non dans des sous-dossiers. De plus, les dossiers du deuxième niveau (www.example.com/folder1/ fruit /foobar.txt) sera créé de manière dynamique J'aimerais éviter de devoir modifier le fichier .htaccess de temps en temps.

Il est possible de créer une règle, quelque chose comme ça, qui s'applique à tous les fichiers portant un nom donné, qui se trouve sur *www.example.com/folder-name-static/. *dossier-nom-dinamyc/***file-nom-static.txt*, où ces parties sont toujours les mêmes juste **cette modification ?

EDIT :

Comme Dave Drager l'a dit, je pourrais simplifier les choses en gardant ces fichiers en dehors du répertoire accessible par le web. Mais ces répertoires contiendront aussi d'autres fichiers, des images, et d'autres choses utilisées par mes utilisateurs, donc j'essaie simplement de ne pas avoir un système de dossiers en double, par exemple :

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt

0voto

Michael Barker Points 8234

Vous pouvez utiliser ACLs Linux .

0 votes

Est-ce que ce ne sont pas les simples permissions de fichiers ? comme rwx ? Comment puis-je faire ce dont j'ai besoin avec ça ?

0voto

therefromhere Points 21329

Après vous avoir tous lus, j'ai remarqué que le fichier .htaccess peut être la solution pour moi : n'affecter que les fichiers du dossier où il se trouve.

Mais mes dossiers sont générés dynamiquement. Je ne pense pas que copier le fichier .htaccess ou le recréer chaque fois que je crée un nouveau dossier soit un moyen fiable.

Comme Dave l'a dit, la solution logique est de stocker les fichiers texte de configuration en dehors du dossier accessible par le Web.

Mais dans chaque dossier, je dois stocker d'autres fichiers, des images par exemple, qui doivent être accessibles par le web... et je ne pense toujours pas que répliquer la structure des dossiers, dans et hors du répertoire racine du web, soit un moyen fiable. Par conséquent, je vais devoir modifier la configuration d'Apache pour inclure le dossier de configuration dans le chemin autorisé de php, mais cela ne devrait pas poser de problème.

Donc, si je n'ai pas le meilleur je dois choisir le moins pire un.

Je vais utiliser la solution des fichiers .htaccess multiples, pour l'instant, en espérant ne pas avoir de regrets à l'avenir.

Toute autre solution est appréciée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X