Apache et arborescence du système

Apache et arborescence du système - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 07-02-2003 à 13:56:03    

admettons ke je dispose d'une machine faisant tourner Apache 1.3.27, de 2 sites web hébergés en virtual hosting (http://url1 et http://url2).
 
admettons aussi ke ces 2 sites soient stockés dans $CHEMIN/url1 et $CHEMIN/url2.
 
comment éviter qu'une personne tapant dans son navigateur :
 
http://url1/../index_url2.html
 
accède a la page d'accueil du site http://url2 ??  :??:  
 
merci d'avance  :jap:


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 07-02-2003 à 13:56:03   

Reply

Marsh Posté le 09-02-2003 à 12:21:07    

un tout p'tit up paske c le week end :)


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 09-02-2003 à 13:03:55    

Si Apache est correctement configuré, ça ne doit pas arriver. Si ça arrive, c'est un bug ou un problème de configuration (et c'est valable quel que soit le serveur Web, IIS, Zeus,...).
 
 Dans chaque directive <VirtualHost url>, il doit y avoir un "DocumentRoot" qui "isole" chaque site Web...
Et bien sûr, il ne doit y avoir aucun site dont le DocumentRoot est la base ($CHEMIN, /usr/www dans l'exemple).
 
 
#>-------- en gros comme ça : -----------------<
...
 <VirtualHost url1>
   ServerName url1
   <Directory "/usr/www/url1">
      Options Indexes -FollowSymLinks  
      AllowOverride None
      Order allow,deny
      Allow from all
   </Directory>
 </VirtualHost>
 
 <VirtualHost url2>
   ServerName url2
   <Directory "/usr/www/url2">
      Options Indexes -FollowSymLinks  
      AllowOverride None
      Order allow,deny
      Allow from all
   </Directory>
 </VirtualHost>
....
#>--------------------------------------<
 
 
 
 Remarque : s'il y a des scripts exécutables sur le serveur (par le biais de Perl, PHP, ASP, JSP, Bash ou autre langage du côté serveur) qui peuvent lire des fichiers à partir de paramètres passés par le client, faut faire attention au traitement de ces paramètres.
 Chtit exemple A NE PAS SUIVRE (en PHP) :
>-------------------------------<
<?php
  //   page.php
  // Cette page est appelée pour charger d'autres fichiers
  $nomfic=$_GET["nomfichier"];
  header("Content-Type: application/octet-stream" );
  header("Content-Length: ".filesize($nomfic));
  $fp = fopen($nomfic, 'r';);
  fpassthru($fp);
  fclose($fp);
?>
>-------------------------------<
 
 Si un comique tape comme url dans son navigateur :
  http://site/page.php?nomfichier=../../etc/passwd
il récupèrera le fichier /etc/passwd du système ! Bon, les droits unix s'appliquent toujours (puisque Apache/PHP ne tourne pas en tant que root) donc il ne sera pas possible de récupérer /etc/master.passwd ou /etc/shadow, mais on peut plutôt chercher à récupérer un .htaccess et un fichier de mot de passe généré par htpasswd...
 Bref bref... J'ai été un peu long, mais je tenais à signaler ce problème quand des scripts sont exécutés sur un serveur. (vécu inside)


Message édité par unk00 le 09-02-2003 à 13:04:55
Reply

Marsh Posté le 09-02-2003 à 15:49:03    

merci pour ton aide, je verifierai mon fichier de conf demain au taf :jap:
 
(de mémoire il y ressemble bcp, seule l'option followsymlinks diffère je crois)


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 09-02-2003 à 16:09:50    

unk00 : le script php ke tu as mis, c est bien du cote server, donc fo etre un peu bete pour faire ca nan ?

Reply

Marsh Posté le 09-02-2003 à 16:47:15    

L'option -FollowSymlink (noter le "-" devant) empêche simplement le suivi des liens symboliques. Sinon, par exemple, si un gars fait un lien  
  $> ln -s /usr/www/url1/fichier.html /usr/www/url2/fichier.html
 alors la requête "http://url2/fichier.html" affichera le même fichier que "http://url1/fichier.html". Bon, bien sûr, ça nécessite en général un accès Shell sur la machine.
 
 
(tomate77)
 

Citation :

fo etre un peu bete pour faire ca


 
 Ben oui, mais là, les développeurs n'avaient que peu d'intérêt pour l'aspect sécurité des choses. Le pire, c'est que sur ce projet, j'avais (pour une fois) fait une doc sur la sécurité dont une partie traitait des erreurs de développement à éviter : en gros, il était écrit qu'il fallait contrôler toutes les entrées envoyées par le client du côté du serveur (et pas en Javascript). Il y avait même un exemple (avec un échappement pour SQL).
 Donc, en conclusion, les docs, ça sert à rien, personne ne les lit...  :-/


Message édité par unk00 le 09-02-2003 à 16:49:28
Reply

Marsh Posté le 09-02-2003 à 16:49:14    

ouais mais kan meme faire un truc aussi "bugue" fo le vouloir :D

Reply

Marsh Posté le 09-02-2003 à 16:56:35    


 Bah oui... Bon, en réalité, c'était pas un code aussi simple, et c'était sur un serveur IIS/ASP (et je connais pas les ASP), et comme je ne suivais pas le développement, je ne l'ai vu que quand j'ai fait quelques tests une fois que l'appli tournait...

Reply

Marsh Posté le 09-02-2003 à 19:06:42    

ben y a aussi des option de securité dans le php.ini c'est po pour rien, je pense !
 
par contre coté perl et cgi ?!

Reply

Marsh Posté le 09-02-2003 à 23:06:07    

Citation :

ben y a aussi des option de securité dans le php.ini c'est po pour rien, je pense !


 
 Oui, bien sur, c'était un exemple, qui marche par défaut sur certaines install de PHP. J'ai donné un exemple en PHP parce que c'était plus rapide pour illustrer (c'est ce que je connais le mieux du point de vue developpement).
 
 

Citation :

par contre coté perl et cgi ?!


 
 Mmmh ? C'est à dire ? comment sécuriser ça ?

Reply

Marsh Posté le 09-02-2003 à 23:06:07   

Reply

Marsh Posté le 10-02-2003 à 09:45:35    

bon alors ca change rien a mon pb ... :/
 
j'ai meme testé avec un
 
<Directory "/usr/www/url1">
    Options None  
     AllowOverride None
     Order allow,deny
     Allow from all
  </Directory>  
 
<Directory "/usr/www/url2">
    Options None  
     AllowOverride None
     Order allow,deny
     Allow from all
  </Directory>  
 
et j'arrive tjrs a remonter mon arbo... :(


Message édité par kazekami le 10-02-2003 à 09:46:03

---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 10-02-2003 à 10:00:56    

unk00 a écrit :


Citation :

par contre coté perl et cgi ?!


 
 Mmmh ? C'est à dire ? comment sécuriser ça ?


 
oui je vois pas, j'ai lu des truc sur suexec, m 'enfin bon ca ma pas convaincu !

Reply

Marsh Posté le 10-02-2003 à 10:45:25    

C'est bizarre... Et il n'y a aucune directive "DocumentRoot /usr/www" ou "<Directory /usr/www>", même hors de la configuration des hôtes virtuels (config initiale) ?
 Je ne vois pas bien la raison de ce comportement... Tiens, quand on fait "http://url1/\.\./index_url2.html", on voit quoi dans le fichier de logs pour l'hôte virtuel url1 ? (un truc du genre <IP> <date> GET /%5C.%5C./index_url2.html HTTP/1.1 ; avec quelque part la valeur de retour) ? Juste pour voir ce que Apache va chercher comme fichier...

Reply

Marsh Posté le 10-02-2003 à 11:00:44    

la seule directive <DIRECTORY> hors des mes hotes virtuels est :
<Directory />
 Options None
 AllowOverride None
 Order deny,allow
 Allow from all
</Directory>
 
et pas de documentroot défini
 
 
dans le fichier access_log de url1 on voit :
 
url1 - - [10/Feb/2003:10:55:51 +0100] "GET /%5C.%5C./url2/index_url2.html HTTP/1.1" 200 24894
 
 
NB : il y avait une petite erreur dans mon premier post : l'url ke je rentrais etait : http://url1/../url2/index_url2.html et non http://url1/../index_url2.html


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 10-02-2003 à 11:25:47    


 Bon, je pensais qu'Apache empêchait ça ; et d'ailleurs, je viens de tester sur un serveur, et ici, Apache m'interdit bien de faire ça (erreur 404 : not found).
 Désolé, je ne vois pas pourquoi là ça se comporte comme ça...

Reply

Marsh Posté le 10-02-2003 à 11:47:29    

oui l'intérêt d'apache c kan meme de pouvoir empêcher ca, mais la je vois pas pkoi ca marche pas :/
 
merci kan meme de ton aide :jap:


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 10-02-2003 à 14:34:20    


 Au fait, juste une remarque, les directives <Directory> pour chaque hôte virtuel sont définies que dans le bloc <VirtualHost> ou ailleurs dans le fichier ?

Reply

Marsh Posté le 10-02-2003 à 14:38:20    

uniquement dans le bloc <virtualhost>


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 10-02-2003 à 15:09:16    

Pareil... Je ne pensais pas que c'était ça, mais bon...
 S'il est pas trop gros, tu peux peut-être poster le "httpd.conf" (en virant les commentaires et les trucs d'indexation -AddIcon*, AddLanguage*, ...- et en remplacant les valeurs sensibles par qqch d'"inoffensif" ). Enfin, je ne sais si c'est judicieux/autorisé de poster un truc de 7-8 ko ici (?)
 Y a ptet un spécialiste d'Apache qui trouvera le pb... Même si je n'ai pas ce problème, ça m'intéresse d'avoir la réponse...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed