¿Cómo bloquear el acceso a un archivo de Tomcat?

10

Tenemos algunos servidores tomcat y acabamos de descubrir que algunos archivos que no queremos que sean públicos tienen acceso a esos archivos. Para ejemplificar:

Digamos que tenemos una carpeta / var / www / html / que estamos publicando a través de tomcat, pero no queremos exponer /var/www/html/conf/dbinfo.txt. En este momento, las personas pueden visitar www.thissite.com/conf/dbinfo.txt y pueden ver cosas. Me gustaría poder bloquearlo para que no lo muestre, pero permite que sea leído por Tomcat.

Cualquier ayuda es apreciada.

Geo
fuente
Hay muchas buenas respuestas, pero la más fácil y sencilla en nuestro entorno de producción fue la publicada el 24 de junio de 2009.
Geo
Gracias por su aporte, esperaba obtener algunos votos antes de aceptarlo como respuesta, ya que también hay otros con votos. ¡Gracias!
Geo

Respuestas:

5

El acceso a los archivos de Tomcat está controlado por la sección de restricciones de seguridad de WEB-INF / web.xml.

Puedes bloquear de confesta manera:

<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 está utilizando apache para servir contenido estático, esto no funcionará ya que apache servirá los archivos conf antes de que tomcat obtenga la URL. En esos casos, necesitaría resolver esto a través de los archivos de configuración http de apache.

sal
fuente
4

¿Por qué no almacenarlo fuera de la estructura de su directorio web? Nunca colocamos nada en / var / www / html / que no quisiéramos que un usuario descubriera.

Bip bip
fuente
4

Hola a todos los trabajadores de SysAdmin y TI en esta publicación. Gracias por sus respuestas Muchas de las respuestas a mis preguntas fueron aceptables, pero esta fue la más adecuada para nuestro entorno de producción.

Okay. Para bloquear un directorio o un archivo dentro de un host virtual en server.xml solo tiene que agregar el siguiente código a server.xml en el directorio tomcat / conf.

Antes de:

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

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

Entonces, la respuesta a la pregunta es agregar las siguientes líneas:

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

Palabra de consejo. Después de arreglar los permisos. Cambie todas las contraseñas y ASEGÚRESE de que no hay un caché de Google.

Joseph Kern
fuente
¡Gracias! está arreglado ahora. Solo quiero saber si hay una mejor solución para eso. Si no recibo respuestas, publicaré la solución. Gracias de nuevo.
Geo
2

Normalmente, la información de configuración (como la información de conexión de la base de datos, ...) se almacena en archivos en la carpeta WEB-INF del archivo WAR implementado en Tomcat. Los archivos bajo WEB-INF no son accesibles para los clientes.

John Meagher
fuente
0

Al tener el mismo problema, pero no puedo ver cómo la respuesta aceptada realmente puede funcionar. La válvula invocada aquí se aplica a toda la aplicación web. No es parte de eso. Así que supongo que, en este caso, una vez que no puede reconocer el contexto como una aplicación web, simplemente ignora la directiva y arroja algunos comentarios en el archivo de registro.


fuente
0

Puede bloquear el directorio en acceso público a través del archivo server.xml

Agregue estas líneas a ese archivo 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>

luego acceda a ese http: // localhost: 8080 / examples luego se muestra como un error de página 404, es decir) significa bloqueado

Linux Sridharan
fuente