對(duì)于大多數(shù)用例來(lái)說(shuō),默認(rèn)配置下的 Tomcat 都是相當(dāng)安全的。有些環(huán)境可能需要更多(或更少)的安全配置。本文統(tǒng)一介紹了一下可能影響安全性的配置選項(xiàng),并適當(dāng)說(shuō)明了一下修改這些選項(xiàng)所帶來(lái)的預(yù)期影響。目的是為了在評(píng)價(jià) Tomcat 安裝時(shí),提供一些應(yīng)值得考慮的配置選項(xiàng)。
注意:本章內(nèi)容畢竟有所局限,你還需要對(duì)配置文檔進(jìn)行深入研究。在相關(guān)文檔中有更完整的屬性描述。
Tomcat 配置不應(yīng)成為唯一的防線,也應(yīng)該保障系統(tǒng)(操作系統(tǒng)、網(wǎng)絡(luò)及數(shù)據(jù)庫(kù),等等)中的其他組件的安全。
不應(yīng)該以根用戶的身份來(lái)運(yùn)行 Tomcat,應(yīng)為 Tomcat 進(jìn)程創(chuàng)建并分配一個(gè)專門的用戶,并為該用戶配置最少且必要的操作系統(tǒng)權(quán)限。比如,不允許使用 Tomcat 用戶實(shí)現(xiàn)遠(yuǎn)程登錄。
文件權(quán)限同樣也應(yīng)適當(dāng)限制。就拿 ASF 中的 Tomcat 實(shí)例為例說(shuō)明吧(禁止自動(dòng)部署,Web 應(yīng)用被部署為擴(kuò)張的目錄。),標(biāo)準(zhǔn)配置規(guī)定所有的 Tomcat 文件都由根用戶及分組用戶所擁有,擁有者具有讀寫特權(quán),分組只有讀取特權(quán),而 World 則沒有任何特權(quán)。例外之處在于,logs、temp 以及 work 目錄的權(quán)限都由 Tomcat 用戶而不是根用戶所擁有。這意味著即使攻擊者破壞了 Tomcat 進(jìn)程,他們也不能改變 Tomcat 配置,無(wú)法部署新應(yīng)用,也無(wú)法修改現(xiàn)有應(yīng)用。Tomcat 進(jìn)程使用掩碼 007 來(lái)維護(hù)這種權(quán)限許可。
對(duì)于網(wǎng)絡(luò)層面,需要使用防火墻來(lái)限制進(jìn)站與出站連接,只允許出現(xiàn)那些你希望的連接。
Tomcat 安裝時(shí)自帶了一些默認(rèn)啟用的 Web 應(yīng)用。過(guò)去一段時(shí)間內(nèi)發(fā)現(xiàn)了不少關(guān)于這些應(yīng)用的漏洞。用不到的應(yīng)用就該刪除,以避免給系統(tǒng)帶來(lái)相關(guān)漏洞而產(chǎn)生的安全風(fēng)險(xiǎn)。
ROOT 應(yīng)用帶來(lái)安全風(fēng)險(xiǎn)的可能性非常小,但它確實(shí)含有正在使用的 Tomcat 的版本號(hào)。應(yīng)該從可公開訪問(wèn)的 Tomcat 實(shí)例中清除 ROOT 應(yīng)用,不是出于安全性原因,而是因?yàn)檫@樣能給用戶提供一個(gè)更適合的默認(rèn)頁(yè)面。
Documentation 帶來(lái)安全風(fēng)險(xiǎn)的可能性非常小,但》它標(biāo)識(shí)出了當(dāng)前正使用的 Tomcat 版本。應(yīng)該從可公開訪問(wèn)的 Tomcat 實(shí)例中清除該應(yīng)用。
應(yīng)該從安全敏感性安裝中移除 examples 應(yīng)用。雖然 examples 應(yīng)用并不包含任何已知的漏洞,但現(xiàn)已證明,它所包含的一些功能可以被攻擊者利用,特別是一些顯示所有接收內(nèi)容,并且能設(shè)置新 cookie 的 cookie 范例。攻擊者將這些公關(guān)和部署在 Tomcat 實(shí)例中的另一個(gè)應(yīng)用中的漏洞相結(jié)合,就能獲取原本根本不可能得到的信息。
由于 Manager 應(yīng)用允許遠(yuǎn)程部署 Web 應(yīng)用,所以經(jīng)常被攻擊者利用,因?yàn)閼?yīng)用的密碼普遍強(qiáng)度不夠,而且大多在 Manager 應(yīng)用中啟用了 Tomcat 實(shí)例可公開訪問(wèn)的功能。Manager 應(yīng)用默認(rèn)是不能訪問(wèn)的,因?yàn)闆]有配置能夠執(zhí)行這種訪問(wèn)的用戶。如果啟用 Manager 應(yīng)用,就應(yīng)該遵循 保證管理型應(yīng)用的安全性 一節(jié)中的指導(dǎo)原則。
Host Manager 應(yīng)用能夠創(chuàng)建并管理虛擬主機(jī),包括啟用虛擬主機(jī)的 Manager 應(yīng)用。Host Manager 應(yīng)用默認(rèn)是不能訪問(wèn)的,因?yàn)闆]有配置能夠執(zhí)行這種訪問(wèn)的用戶。如果啟用 Host Manager 應(yīng)用,就應(yīng)該遵循 保證管理型應(yīng)用的安全性 一節(jié)中的指導(dǎo)原則。
在配置能夠?yàn)?Tomcat 實(shí)例提供管理功能的 Web 應(yīng)用時(shí),需要遵循下列指導(dǎo)原則:
啟用安全管理器能讓 Web 應(yīng)用運(yùn)行在沙盒中,從而極大限制 Web 應(yīng)用執(zhí)行惡意行為的能力——比如調(diào)用 System.exit(),在 Web 應(yīng)用根目錄或臨時(shí)目錄外建立網(wǎng)絡(luò)連接或訪問(wèn)文件系統(tǒng)。但應(yīng)注意的是,有些惡意行為是安全管理器所無(wú)法阻止的,比如利用無(wú)限循環(huán)產(chǎn)生 CPU 極大開銷。
啟用安全管理器經(jīng)常用來(lái)限制潛在影響,比如防止攻擊者通過(guò)某種方式危害受信任的 Web 應(yīng)用。安全管理器也可能被用來(lái)減少運(yùn)行不受信任的 Web 應(yīng)用(比如在托管環(huán)境中)所帶來(lái)的風(fēng)險(xiǎn),但它只能減少這種風(fēng)險(xiǎn),并不能終止不受信任的 Web 應(yīng)用。如果運(yùn)行多個(gè)不受信任的 Web 應(yīng)用,強(qiáng)烈建議將每個(gè)應(yīng)用都部署為獨(dú)立的 Tomcat 實(shí)例(理想情況下還需要部署在獨(dú)立的主機(jī)上),以便盡量減少惡意 Web 應(yīng)用對(duì)其他應(yīng)用產(chǎn)生的危害。
Tomcat 已經(jīng)過(guò)安全管理器的測(cè)試。但大多數(shù) Tomcat 用戶卻沒有運(yùn)行過(guò)安全管理器,所以 Tomcat 也沒有相關(guān)的用戶測(cè)試過(guò)的配置?,F(xiàn)在已經(jīng)(并會(huì)繼續(xù))報(bào)告指出了一些關(guān)于運(yùn)行安全管理器時(shí)產(chǎn)生的 Bug。
安全管理器在運(yùn)行時(shí)所暴露出的限制可能在于中斷很多應(yīng)用。所以,在未經(jīng)大量測(cè)試前,還是不要使用它為好。理想情況下,安全管理器應(yīng)該在開發(fā)前期使用,因?yàn)閷?duì)于一個(gè)成熟的應(yīng)用來(lái)說(shuō),啟用安全管理器后,記錄修補(bǔ)問(wèn)題會(huì)極大浪費(fèi)時(shí)間。
啟用安全管理器會(huì)改變下列設(shè)置的默認(rèn)值: