第二卷 深入剖析IIS 6.0(下)
前文介紹了IIS 6.0的安裝和Web服務器的新型體係結構。IIS 6.0新特性的數量多得令人驚奇,其中一些特性是如此引人注目,以至於人們的大部分注意力都被它們吸引。在這第二篇介 紹IIS 6.0的文章中,我們不僅將了解這些已成為"明星"的特性,還將關注一下IIS 6.0各種較少有人注意卻同樣重要的改進之處。
一、安全
微軟一次又一次地做著同樣一件事情--某個軟件產品出了問題,飽受人們詬病,於是趕緊發布新的版本將問題解決。例如,發布Windows NT 4.0之後,因穩定性問題而飽受批評;於是微軟發布了Windows 2000,新操作係統的穩定性頗受好評,但Win 2K服務器默認安裝的IIS 5.0卻成了巨大的安全隱患,需要下大力氣加以整治才能解決問題。IIS 6.0默認不安裝,如果按照缺省方式安裝,Web服務器隻能提供靜態內容服務。因此,從這個角度看,即使以後IIS 6.0應用引擎和組件突然出現了問題,IIS 6.0還是極大地降低了安全風險。另外,Windows Server 2003還有一個新的組策略"禁止安裝IIS",有了該組策略,我們就可以禁止Windows 2003在活動目錄(AD)森林中禁止不準備作Web服務器用的機器上安裝IIS 6.0,防止網絡上出現根本無用的、不安全的IIS 6.0服務器。不過,目前這個組策略隻對Windows 2003服務器有效,不能防止Windows XP Pro和Win 2K的機器安裝IIS 5.0。
當然,由於剛剛安裝好的IIS 6.0不支持動態內容,所以出現了第二個人們經常會問的問題:"為什麼我的服務器不能運行ASP?"(前文提到,第一個人們經常會問的問題是:"IIS 6.0可以在Win 2K服務器上運行嗎"?答案是"不")。要想在IIS 6.0上運行程序,必須使用IIS 6.0的一種新特性,即Web服務擴展,或Web Service Extension(這個名字似乎意味著它與XML Web服務有某種關係,實際情況並非如此。)
如果要為某個程序啟用Web服務擴展,首先打開IIS管理器(在"控製麵板"→"管理工具"中。以前叫做Internet服務管理器或ISM),如圖一,點擊"添加一個新的Web服務擴展",啟動向導創建一個新的規則。為規則指定一個名字,然後找到想要啟用的執行文件。另外,\system32\inetsrv下有一個iisext.vbs腳本,它也能夠配置並管理運行帶有IIS 6.0的Windows Server 2003的Web服務擴展、應用程序和單獨的文件。管理員可以使用此腳本來啟用和列出應用程序;添加和刪除應用程序依賴性;啟用、禁用和列出 Web 服務擴展;添加、刪除、啟用、禁用和列出單獨文件。
圖一
在圖一中,注意"所有未知ISAPI擴展"和"所有未知CGI擴展"這兩種Web服務擴展。默認情況下,這兩種擴展是禁用的,意味著除非明確地允許一個應用在IIS 6.0上運行,否則它就不能運行。如果一個用戶請求了某個沒有啟用的文件,IIS 6.0將向用戶返回404錯誤--文件或目錄沒有找到,同時在W3SVC日誌中記錄"404.2文件或目錄無法找到:鎖定策略禁止該請求"。在IIS 6.0中,404.2和其他子狀態代碼是W3SVC日誌文件的一項可選功能,用來幫助排解故障、疑難(IIS 5.0和IIS 4.0中也有子狀態代碼,不過不會在日誌文件中記錄,但可以將它們轉到定製的錯誤頁麵,便於根據子狀態代碼執行特殊的處理)。IIS 6.0的子狀態代碼很有用,它們提供了描述問題的詳細信息,例如:403.20,禁止訪問:Passport登錄失敗;403.18,禁止訪問:無法在當前應用程序池中執行請求的URL;404.3,文件或目錄無法找到:MIME映射策略禁止該請求;500.19,服務器錯誤:該文件的數據在配置數據庫中配置不正確。所有這些錯誤和其他錯誤都映射到定製的錯誤頁麵,錯誤頁麵不會把子狀態代碼發送給用戶,攻擊者無法獲知具體的錯誤信息。
另一個安全方麵的改進之處是IIS 6.0允許指派一個加密服務提供者(Cryptographic Service Provider,CSP),能夠將基於硬件的安全套接字層(SSL)加速器集成到IIS 6.0,從而把加密任務從服務器的通用CPU轉移到了專門為加密操作而優化的專用設備,有利於提高性能和可靠性。
二、配置數據
在IIS 5.0和IIS 4.0中,配置數據庫采用二進製文件結構,但IIS 6.0放棄了這一做法。IIS 6.0的配置數據由兩個XML文件構成:一個是Metabase.xml,包含IIS 6.0服務器的配置信息;另一個是mbschema.xml,包含配置數據的模式定義。IIS管理器提供了一項新的功能,允許保存配置數據副本,隻要右擊Web網站,然後選擇"所有任務"→"將配置保存到一個文件",然後指定配置數據副本的文件名字和保存路徑即可。按照這種方式保存配置數據時,IIS 6.0利用係統的機器碼(Machine Key)加密配置數據的某些部分,因此,配置數據的副本隻對創建該副本的機器有用。
不過,在"將配置保存到一個文件"對話框中,我們可以選中"用密碼對配置進行加密"選項,然後指定密碼,用密碼來保護導出的配置文件。如果提供了密碼,IIS 6.0將用密碼來替代機器碼,以後隻要提供同一個密碼,就可以將配置數據導入到另一個服務器。另外,我們可以使用命令行腳本iisback.vbs(在systemroot\System32中)創建和管理遠程或本地計算機的IIS配置的備份副本,管理員可以使用此腳本工具創建其IIS配置的備份副本,從備份副本還原IIS配置以及列出和刪除備份副本。
有些時候,我們隻要保存某個應用程序池、Web網站或虛擬目錄的配置,而不是保存全部的配置信息,這時可以按照如下步驟操作:右擊要保持配置信息的對象,選擇菜單"所有任務"→"將配置保存到一個文件",如圖二所示,如果準備將配置數據導入到另一個服務器,必須提供加密文件的密碼。
圖二
如果右擊一個應用程序池、Web網站組或單個網站,然後選擇"新建"→"應用程序池(來自文件)",或者"新建"→"網站"→"來自文件",或者"新建"→"虛擬目錄(來自文件)",就可以從保存的配置文件創建新的應用程序池、Web網站或虛擬目錄。因此,必要的時候,我們可以隻創建和配置一個對象,利用"將配置保存到一個文件"功能導出對象的配置信息,然後利用"新建"→"虛擬目錄(來自文件)"等功能將配置信息導入到多個Web網站。這就是說,我們可以先精心配置一個模板,然後用它來創建和配置新的網站。當然,出現問題時,配置信息副本還可以用來恢複網站的設置。
由於IIS 6.0配置信息是可移植的,它還有另外一個好處,這就是方便了升級。假設我們升級時不能直接在Win 2K/IIS 5.0上安裝Windows 2003/IIS 6.0,必須換一台機器,這時就要解決如何將IIS 5.0不可移植的配置數據轉移到新的IIS 6.0服務器的問題。利用IIS 6.0配置數據的可移植性,解決辦法是:首先安裝好新的Windows 2003服務器,為原來的Win 2K服務器做一個完整的備份,然後在Win 2K服務器上安裝第二個Windows 2003服務器將它升級,導出第二個Windows 2003服務器的配置數據(用密碼加密),然後將配置數據導入到新的Windows 2003服務器。新安裝的Windows 2003服務器必須作一些調整,例如允許IUSR帳戶等,但至少現在不必重新執行全部配置操作了。