我们有几个tomcat服务器,我们只是发现有些文件我们不希望公众有权访问这些文件。 为了举例说明:
假设我们有一个通过tomcat发布的/ var / www / html /文件夹,但是我们不想公开/var/www/html/conf/dbinfo.txt。 此时人们可以访问www.thissite.com/conf/dbinfo.txt,他们可以看到东西。 我希望能够阻止它,所以不显示它,但它允许它被tomcat本身读取。
任何帮助表示赞赏。
Tomcat的文件访问由WEB-INF / web.xml的安全约束部分控制。
你可以用这种方式阻止conf :
<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>
如果你使用apache来提供静态内容,这将不会工作,因为Apache会在tomcat获取URL之前提供conf文件。 在这些情况下,你需要通过Apache的httpconfiguration文件解决这个问题。
为什么不把它存储在你的网页目录结构之外? 我们从来没有在/ var / www / html /下面放置任何我们不希望用户发现的东西。
你好,这个职位的所有系统pipe理员和IT工作者。 感谢您的回应。 对我的问题的许多答复是可以接受的,但是这个最适合我们的生产环境。
好。 要阻止server.xml中的虚拟主机中的目录或文件,只需将以下代码添加到tomcat / conf目录中的server.xml中即可。
之前:
<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>
后:
<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>
所以问题的答案是添加以下几行:
<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>
build议的话。 修复权限后。 改变所有的密码,并确保没有它的谷歌caching。
通常,configuration信息(如数据库连接信息等)存储在部署到Tomcat的WAR文件的WEB-INF文件夹下的文件中。 WEB-INF下的文件不能被客户访问。
有同样的问题,但我不明白如何接受的答案可以真正的工作。 这里调用的阀适用于整个webapp。 不是它的一部分。 所以我假设,在这种情况下,一旦它不能识别上下文作为代表一个Web应用程序,它只是忽略该指令,并在日志文件中引发一些注释。