如何阻止对文件的访问由Tomcat提供?


10

我们有一些tomcat服务器,我们只是发现一些我们不希望公众访问的文件。举例说明:

假设我们有一个文件夹/ var / www / html /,该文件夹正在通过tomcat发布,但是我们不想公开/var/www/html/conf/dbinfo.txt。现在,人们可以访问www.thissite.com/conf/dbinfo.txt,他们可以看到内容。我希望能够阻止它,因此不会显示它,但是它允许Tomcat自己读取它。

任何帮助表示赞赏。


有很多很好的答案,但在我们的生产环境的最简单,更容易是一个在6月24日发布的2009年
地球

感谢您的输入,我希望在接受它作为答案之前先获得一些投票,因为还有其他人也有投票。谢谢!
地理位置

Answers:


5

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配置文件解决此问题。


4

为什么不将其存储在Web目录结构之外?我们从未在/ var / www / html /下放置任何我们不想让用户发现的东西。


4

这篇文章中的所有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>

2

忠告。修复权限后。更改所有密码,并确保没有google缓存。


谢谢!现在已修复。我只是想知道是否有更好的解决方案。如果没有得到答复,我将发布此修复程序。再次感谢。
Geo

2

通常,配置信息(例如数据库连接信息,...)存储在部署到Tomcat的WAR文件的WEB-INF文件夹下的文件中。客户端无法访问WEB-INF下的文件。


0

遇到同样的问题,但我看不出接受的答案如何真正起作用。此处调用的阀适用于ENTIRE Webapp。不属于它。因此,我假设在这种情况下,一旦它无法识别上下文代表一个Web应用程序,它只是忽略了指令,并在日志文件中抛出了一些注释。


0

您可以通过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页面错误,即)表示被阻止

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.