Linux

如何阻止對文件的訪問由 Tomcat 提供服務?

  • April 3, 2020

我們有一些 tomcat 伺服器,我們剛剛發現一些我們不希望公開訪問這些文件的文件。舉例說明:

假設我們有一個通過 tomcat 發布的文件夾 /var/www/html/,但我們不想暴露 /var/www/html/conf/dbinfo.txt。此時人們可以訪問 www.thissite.com/conf/dbinfo.txt 並且他們可以看到東西。我希望能夠阻止它,所以不顯示它,但它允許它被 tomcat 本身讀取。

任何幫助表示讚賞。

這篇文章中的所有系統管理員和 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>

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&gt;GET&lt;/http-method>
       <http-method&gt;POST&lt;/http-method>
   &lt;/web-resource-collection&gt;
   &lt;auth-constraint&gt;
       &lt;role-name&gt;NOSOUPFORYOU&lt;/role-name&gt;
   &lt;/auth-constraint&gt;
&lt;/security-constraint&gt;

&lt;login-config&gt;
   &lt;auth-method&gt;DEFAULT&lt;/auth-method&gt;
   &lt;realm-name&gt;NOACCESSFORANYONE&lt;/realm-name&gt;
&lt;/login-config&gt;
&lt;security-role&gt;
   &lt;role-name&gt;NOSOUPFORYOU&lt;/role-name&gt;
&lt;/security-role&gt;

如果您使用 apache 提供靜態內容,這將不起作用,因為 apache 將在 tomcat 獲取 URL 之前提供 conf 文件。在這些情況下,您需要通過 apache 的 http 配置文件來解決這個問題。

引用自:https://serverfault.com/questions/28337