Comment empêcher l'accès à un fichier d'être servi par Tomcat?

10

Nous avons quelques serveurs tomcat et nous venons de découvrir que certains fichiers dont nous ne voulons pas que le public ait accès à ces fichiers. Pour illustrer:

Disons que nous avons un dossier / var / www / html / que nous publions via tomcat, mais nous ne voulons pas exposer /var/www/html/conf/dbinfo.txt. En ce moment, les gens peuvent aller sur www.thissite.com/conf/dbinfo.txt et ils peuvent voir les choses. J'aimerai pouvoir le bloquer donc ne l'affiche pas mais il permet qu'il soit lu par tomcat lui-même.

Toute aide est appréciée.

Géo
la source
Il y a beaucoup de bonnes réponses, mais la plus simple et la plus facile dans notre environnement de production a été celle publiée le 24 juin 2009.
Geo
Merci pour votre contribution, j'espérais obtenir quelques votes avant de l'accepter comme réponse, car il y en a d'autres qui ont aussi des votes. Merci!
Geo

Réponses:

5

L'accès aux fichiers de Tomcat est contrôlé par la section des contraintes de sécurité de WEB-INF / web.xml.

Vous pouvez bloquer de confcette façon:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>HTTP-Protected-Resource-1</web-resource-name>
        <description>Description here</description>
        <url-pattern>/conf/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>NOSOUPFORYOU</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DEFAULT</auth-method>
    <realm-name>NOACCESSFORANYONE</realm-name>
</login-config>
<security-role>
    <role-name>NOSOUPFORYOU</role-name>
</security-role>

Si vous utilisez apache pour diffuser du contenu statique, cela ne fonctionnera pas car apache diffusera les fichiers de conf avant que tomcat obtienne l'URL. Dans ces cas, vous devrez résoudre ce problème via les fichiers de configuration http d'Apache.

sal
la source
4

Pourquoi ne pas le stocker en dehors de la structure de votre répertoire Web? Nous ne mettons jamais sous / var / www / html / quoi que ce soit que nous ne voudrions pas qu'un utilisateur découvre.

Bip Bip
la source
4

Bonjour à tous les administrateurs système et informatiques de ce poste. Merci pour vos réponses. Beaucoup de réponses à mes questions étaient acceptables, mais celle-ci était la mieux adaptée à notre environnement de production.

D'accord. Pour bloquer un répertoire ou un fichier dans un hôte virtuel dans server.xml, il vous suffit d'ajouter le code suivant à server.xml dans le répertoire tomcat / conf.

Avant:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

Après:

  <Host name="www.customer.com" appBase="/usr/share/app4_0b/tomcat/webapps/" autoDeploy="false">
    <Context path="" docBase="./customer" />

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

    <Valapp className="org.apache.catalina.valapps.FastCommonAccessLogValapp"
           directory="weblogs/customer"
           prefix="www_customer_com_"
           suffix=".txt"
           pattern="combined"
           resolappHosts="false" />
  </Host>

Donc, la réponse à la question est d'ajouter les lignes suivantes:

    <Context path="/app/xv/~customer/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
    <Context path="/etc" docBase="" >
      <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>
Géo
la source
2

Un conseil. Après avoir corrigé les autorisations. Modifiez tous les mots de passe et assurez-vous qu'il n'y en a pas de cache Google.

Joseph Kern
la source
Merci! est corrigé maintenant. Je veux juste savoir s'il existe une meilleure solution. Si je n'obtiens pas de réponses, je publierai le correctif. Merci encore.
Geo
2

Normalement, les informations de configuration (comme les informations de connexion à la base de données, ...) sont stockées dans des fichiers sous le dossier WEB-INF du fichier WAR déployé sur Tomcat. Les fichiers sous WEB-INF ne sont pas accessibles aux clients.

John Meagher
la source
0

Ayant le même problème, mais je ne vois pas comment la réponse acceptée peut vraiment fonctionner. La valve invoquée ici s'applique à la webapp ENTIÈRE. Ça n'en fait pas partie. Je suppose donc que dans ce cas, une fois qu'il ne peut pas reconnaître le contexte comme représentant une application Web, il ignore simplement la directive et envoie des commentaires dans le fichier journal.


la source
0

Vous pouvez bloquer le répertoire en accès public via le fichier server.xml

Ajoutez ces lignes à ce fichier server.xml

    <Context path="/opt/tomcat7/webapps/examples" docBase="" >
    <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

    <Context path="/examples" docBase="" >
    <Valapp className="org.apache.catalina.valapps.RemoteAddrValapp" deny="*" />
    </Context>

puis accédez à ce http: // localhost: 8080 / examples, puis il apparaît comme une erreur de page 404, c'est-à-dire) signifie bloqué

Linux Sridharan
la source