Solución 1:
El acceso a archivos de Tomcat está controlado por la sección de restricciones de seguridad de WEB-INF/web.xml.
Puedes bloquear conf
de esta 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 entregar contenido estático, esto no funcionará ya que apache entregará los archivos conf antes de que tomcat obtenga la URL. En esos casos, deberá resolver esto a través de los archivos de configuración http de apache.
Solución 2:
Hola a todos los administradores de sistemas y trabajadores de TI en esta publicación. Gracias por sus respuestas. Muchas de las respuestas a mis preguntas fueron aceptables, pero esta era la más adecuada para nuestro entorno de producción.
Está bien. 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:
<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>
Solución 3:
¿Por qué no almacenarlo fuera de la estructura de su directorio web? Nunca ponemos nada en /var/www/html/ que no queramos que un usuario descubra.
Solución 4:
Palabra de consejo. Después de arreglar los permisos. Cambie todas las contraseñas y ASEGÚRESE de que no haya un caché de Google.
Solución 5:
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.