Come bloccare l'accesso a un file da Tomcat?


10

Abbiamo alcuni server Tomcat e abbiamo appena scoperto che alcuni file che non vogliamo pubblici abbiano accesso a tali file. Per esemplificare:

Supponiamo di avere una cartella / var / www / html / che pubblichiamo tramite Tomcat, ma non vogliamo esporre /var/www/html/conf/dbinfo.txt. In questo momento le persone sono in grado di visitare il sito www.thissite.com/conf/dbinfo.txt e sono in grado di vedere le cose. Mi piacerebbe essere in grado di bloccarlo, quindi non lo mostra ma gli consente di essere letto da Tomcat stesso.

Qualsiasi aiuto è apprezzato.


Ci sono molte buone risposte, ma la più semplice e facile nel nostro ambiente di produzione è stata quella pubblicata il 24 giugno 2009.
Geo,

Grazie per il tuo contributo, speravo di ottenere alcuni voti prima di accettarlo come risposta, dal momento che ci sono anche altri con voti. Grazie!
Geo,

Risposte:


5

L'accesso ai file di Tomcat è controllato dalla sezione sui vincoli di sicurezza di WEB-INF / web.xml.

Puoi bloccare in confquesto modo:

<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>

Se stai usando apache per pubblicare contenuti statici, questo non funzionerà poiché apache servirà i file conf prima che tomcat ottenga l'URL. In questi casi, dovrai risolverlo tramite i file di configurazione http di apache.


4

Perché non memorizzarlo al di fuori della struttura della directory web? Non abbiamo mai inserito nulla in / var / www / html / che non vorremmo che un utente scoprisse.


4

Salve a tutti i lavoratori SysAdmin e IT in questo post. Grazie per le tue risposte Molte delle risposte alle mie domande erano accettabili, ma questa era la più adatta al nostro ambiente di produzione.

Ok. Per bloccare una directory o un file all'interno di un host virtuale in server.xml devi solo aggiungere il seguente codice a server.xml nella directory tomcat / conf.

Prima:

  <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>

Dopo:

  <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>

Quindi la risposta alla domanda è aggiungere le seguenti righe:

    <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>

2

Parola di consiglio. Dopo aver corretto le autorizzazioni. Cambia tutte le password e assicurati che non ci sia una cache di Google.


Grazie! è stato risolto ora. Voglio solo sapere se esiste una soluzione migliore per questo. Se non ricevo risposte, pubblicherò la correzione. Grazie ancora.
Geo,

2

Normalmente le informazioni di configurazione (come le informazioni di connessione al database, ...) sono archiviate nei file nella cartella WEB-INF del file WAR distribuito su Tomcat. I file in WEB-INF non sono accessibili ai client.


0

Avere lo stesso problema, ma non riesco a vedere come la risposta accettata può davvero funzionare. La valvola invocata qui si applica all'intera webapp. Non parte di esso. Quindi suppongo che in questo caso una volta che non è in grado di riconoscere il contesto come rappresentante di una webapp, semplicemente ignora la direttiva e lancia alcuni commenti nel file di registro.


0

È possibile bloccare la directory in accesso pubblico tramite il file server.xml

Aggiungi queste righe al file 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>

quindi accedi a quel http: // localhost: 8080 / esempi quindi mostra come un errore di 404 pagine, cioè) significa bloccato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.