我们有一些tomcat服务器,我们只是发现一些我们不希望公众访问的文件。举例说明:
假设我们有一个文件夹/ var / www / html /,该文件夹正在通过tomcat发布,但是我们不想公开/var/www/html/conf/dbinfo.txt。现在,人们可以访问www.thissite.com/conf/dbinfo.txt,他们可以看到内容。我希望能够阻止它,因此不会显示它,但是它允许Tomcat自己读取它。
任何帮助表示赞赏。
我们有一些tomcat服务器,我们只是发现一些我们不希望公众访问的文件。举例说明:
假设我们有一个文件夹/ var / www / html /,该文件夹正在通过tomcat发布,但是我们不想公开/var/www/html/conf/dbinfo.txt。现在,人们可以访问www.thissite.com/conf/dbinfo.txt,他们可以看到内容。我希望能够阻止它,因此不会显示它,但是它允许Tomcat自己读取它。
任何帮助表示赞赏。
Answers:
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的http配置文件解决此问题。
这篇文章中的所有SysAdmin和IT Workers大家好。感谢您的回复。对我的问题的许多答复都是可以接受的,但这是最适合我们生产环境的答复。
好。要在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>
遇到同样的问题,但我看不出接受的答案如何真正起作用。此处调用的阀适用于ENTIRE Webapp。不属于它。因此,我假设在这种情况下,一旦它无法识别上下文代表一个Web应用程序,它只是忽略了指令,并在日志文件中抛出了一些注释。
您可以通过server.xml文件阻止该目录进行公共访问
将此行添加到该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>
然后访问该http:// localhost:8080 / examples,然后显示为404页面错误,即)表示被阻止