Como impedir que o acesso a um arquivo seja atendido pelo Tomcat?

10

Temos alguns servidores tomcat e acabamos de descobrir que alguns arquivos que não queremos que o público tenham acesso a esses arquivos. Para exemplificar:

Digamos que temos uma pasta / var / www / html / que estamos publicando através do tomcat, mas não queremos expor /var/www/html/conf/dbinfo.txt. Neste momento, as pessoas podem acessar o site www.thissite.com/conf/dbinfo.txt e podem ver as coisas. Eu gostaria de poder bloqueá-lo para que ele não seja exibido, mas permite que seja lido pelo próprio tomcat.

Qualquer ajuda é apreciada.

Geo
fonte
Há muitas boas respostas, mas o mais fácil e mais fácil em nosso ambiente de produção foi o único publicado em 24 de junho de 2009.
Geo
Obrigado pela sua contribuição, eu esperava receber alguns votos antes de aceitá-lo como resposta, já que existem outros com votos. Obrigado!
Geo

Respostas:

5

O acesso ao arquivo do Tomcat é controlado pela seção de restrições de segurança do WEB-INF / web.xml.

Você pode bloquear confdesta forma:

<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 você estiver usando o apache para veicular conteúdo estático, isso não funcionará, pois o apache servirá os arquivos conf antes que o tomcat obtenha o URL. Nesses casos, você precisaria resolver isso através dos arquivos de configuração http do apache.

sal
fonte
4

Por que não armazená-lo fora da estrutura de diretórios da web? Nunca colocamos nada em / var / www / html / que não queremos que um usuário descubra.

Bip Bip
fonte
4

Olá a todos os SysAdmin e trabalhadores de TI nesta postagem. Obrigado por suas respostas. Muitas das respostas às minhas perguntas foram aceitáveis, mas essa foi mais adequada ao nosso ambiente de produção.

Está bem. Para bloquear um diretório ou arquivo em um host virtual em server.xml, você apenas precisa adicionar o seguinte código ao server.xml no diretório tomcat / conf.

Antes:

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

Depois de:

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

Portanto, a resposta para a pergunta é adicionar as seguintes linhas:

    <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>
Geo
fonte
2

Palavra de conselho. Depois de corrigir as permissões. Altere todas as senhas e verifique se não há um cache do Google.

Joseph Kern
fonte
Obrigado! está consertado agora. Eu só quero saber se existe uma solução melhor para isso lá fora. Se não receber respostas, publicarei a correção. Obrigado novamente.
Ge
2

Normalmente, as informações de configuração (como informações de conexão com o banco de dados, ...) são armazenadas em arquivos na pasta WEB-INF do arquivo WAR implantado no Tomcat. Os arquivos em WEB-INF não estão acessíveis aos clientes.

John Meagher
fonte
0

Tendo o mesmo problema, mas não consigo ver como a resposta aceita pode realmente funcionar. A válvula chamada aqui se aplica ao aplicativo da web INTEIRO. Não faz parte disso. Portanto, estou assumindo que, neste caso, uma vez que não é possível reconhecer o contexto como representando um aplicativo da Web, simplesmente ignora a diretiva e lança alguns comentários no arquivo de log.


fonte
0

Você pode bloquear o diretório no acesso público por meio do arquivo server.xml

Inclua essas linhas no arquivo 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>

acesse esse http: // localhost: 8080 / examples e então mostre como um erro de página 404, ou seja) significa bloqueado

Linux Sridharan
fonte