Linux
如何阻止對文件的訪問由 Tomcat 提供服務?
我們有一些 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>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 配置文件來解決這個問題。