下文的描述將使用變量名 $CATALINA_BASE 來指代工作目錄。如果你還沒有為多個 Tomcat 實例設置 CATALINA_BASE 目錄,那么 $CATALINA_BASE 就將被設置為 $CATALINA_HOME(Tomcat 的安裝目錄)的值。
Tomcat 以默認值運行是非常危險的,因為這能讓互聯網上的任何人都可以在你的服務器上執行 Manager 應用。因此,Manager 應用要求任何用戶在使用前必須驗證自己的身份,提供自己的用戶名和密碼,以及相應配置的 manager-** 角色(角色名稱根據所需的功能而定)。
另外,默認用戶文件($CATALINA_BASE/conf/tomcat-users.xml)中的用戶名稱都沒有指定角色名稱,所以默認是不能訪問 Manager 應用的。
這些角色名稱位于 Manager 應用的 web.xml 文件中。可用的角色包括:
HTML 界面不會遭受 CSRF(Cross-Site Request Forgery,跨站請求偽造)攻擊,但純文本界面及 JMX 界面卻有可能無法幸免。
這意味著,如果用戶能夠訪問純文本界面及 JMX 界面,那么在利用 Web 瀏覽器去訪問 Manager 應用時,必須要萬分謹慎。要想保持對 CSRF 免疫,則必須:
注意 JMX 代理界面是 Tomcat 中非常高效的底層、類似于根級別的管理界面。如果用戶知道了該調用的命令,就能實現大量行為,所以一定不要輕易授予用戶 manager-jmx 角色。
為了能夠訪問 Manager 應用,必須創建一個新的用戶名/密碼組合,并為之授予一種 manager-** 角色,或者把一種 manager-** 角色授予現有的用戶名/密碼組合。因為本文檔的大部分內容都在描述純文本界面的命令,所以為了將來討論實例方便起見,把角色名稱定為 manager-script。而涉及到具體如何配置用戶名及密碼,則是跟你所使用的Realm 實現有關:
<user username="craigmcc" password="secret" roles="standard,manager-script" />
它定義了用戶登錄時所用的用戶名和密碼,以及他或她采用的角色名稱。你可以把 manager-script 角色添加到由逗號分隔的 roles 屬性中,從而將該角色賦予一個或多個用戶,也可以利用指定角色來創建新的用戶。
在下一節,當你第一次嘗試使用 Manager 的一個命令時,將會使用基本驗證進行登錄。用戶名和密碼的具體內容并不重要,只要它們能夠證明,用戶數據庫中擁有 manager-script 角色的用戶是有效用戶,我們的目的就達到了。
除了密碼限制訪問之外,Manager 還可以配置 RemoteAddrValve 和 RemoteHostValve 這兩個參數,分別通過 遠程 IP 地址 或遠程主機名來進行限制訪問。詳情可查看 Valve 文檔。下列范例是通過 IP 地址來限制訪問本地主機:
<Context privileged="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.0\.0\.1"/></Context>