用安全模板加強Windows的安全
Windows NT家族的操作系統——Windows XP、Windows 2000、NT 4.0和NT 3.x一直以缺乏安全性飽受爭議。但實際上,這些操作系統(包括Novell Netware和各種Unix變種)都具有相當好的安全性,它們都裝備了數以千計的“鎖”——這是一些操作系統用來確保安全性的部件,能夠讓我們作出只允許用戶A可以在對象B上實施動作C之類的規定。
NT和Netware之間的區別在于,雖然兩種操作系統都提供了這類鎖,但一個新裝的Netware系統中這些鎖默認是鎖上的,管理員根據需要有選擇地打開某些鎖;而在一個新裝的N T操作系統中,大部分的鎖默認處于打開狀態,管理員的任務是關閉某些可能引起安全隱患的鎖。(Windows Server 2003的情況有所不同,它的設計改用了Netware策略。相比之下,Win 2K默認鎖上的選項要多于NT 4.0,而新裝的XP又比Win 2K Pro有更多的安全限制。)
對于NT系列平臺的管理員來說,這些鎖帶來的是一個兩難的局面:從理論上看,它們確實提供了保障服務器和工作站安全的機制;但實際操作起來卻要耗費大量的時間。XP是一個優秀的操作系統,但如果要我們檢查每一臺機器,依次調整數十種授權和權限選項來保證系統的安全,很多人會把XP或其他NT系列的操作系統看成代價昂貴和浪費時間的代名詞。我們需要一種快速配置安全選項的辦法,它能夠根據要求自動批量設定所有與安全有關的配置。
這種辦法確實存在,它就是安全模板。安全模板是一種ASCII文本文件,它定義了本地權限、安全配置、本地組成員、服務、文件和目錄授權、注冊表授權等方面的信息。創建好安全模板之后,我們只要一個命令就可以將它定義的信息應用/部署到系統,所有它定義的安全配置都立即生效——原本需要數小時修補注冊表、倒騰管理控制臺“計算機管理”單元以及其他管理工具才能完成的工作,現在只需數秒就可以搞定。
安全模板并非Windows Server 2003或XP獨創的功能,第一次提出這個概念的是NT 4.0 SP 4。安全模板是每一個管理員都必須了解的重要工具。安全模板不會讓你修改不能通過其他方式修改的安全選項,它只是提供了一種快速批量修改安全選項的辦法。凡是可以利用安全模板設置的安全選項,同樣可以使用Windows的GUI工具手工修改,但后者耗費的時間肯定多得多。
一、安全模板可以批量修改的五類和安全有關的設置
1.管理組
模板能夠調整本地的組成員。如果你的用戶使用的是NT系列的桌面系統,或許你也在為這樣的問題煩惱:授予用戶哪些控制桌面系統的權限才合適?有的公司讓每一位用戶都擁有本地管理員權限,有些則授予Power Users權限,還有的只授予Users權限。
如果限制了用戶對自己桌面系統的管理權限,可以肯定的是,某些時候你不得不放寬限制,至少是臨時性地放寬。例如,假設設置一個工作站時只允許本地的Administrator帳戶成為本地Administrators組的成員,后來有一個維護人員為了方便“臨時”地將普通用戶帳戶提升為Administrators組的成員,本來他打算稍后恢復原來的設置,但后來卻忘記了。如果我們定義了一個“只有Administrator才能加入本地Administrators組”的安全模板,只要重新應用一下這個模板就可以防止其他用戶進入Administrators組。
當然,模板不是隨時監視安全設置選項確實已被采納的守護神,確保安全設置策略已被執行的最好辦法是定期重新應用整個模板,或者創建一個組策略來應用模板(組策略大約每隔90分鐘重新應用自己的設置信息)。凡是安全模板能夠做到的事情,組策略同樣都能夠做到,但如果使用組策略的話就要有一個Active Directory(AD)域,而模板卻沒有這方面的要求。
2.調整NTFS權限
安全模板能夠調整NTFS權限。例如,假設我們想要授予C:Stuff目錄System/完全控制和Aministrators/完全控制的NTFS權限,但禁止任何其他用戶訪問,模板可以方便地設定這些授權和限制。
另外,由于模板可以應用到多臺機器(倘若使用組策略的話),我們可以將同樣的NTFS授權應用到整個域。如果你和大多數NT管理員一樣,那么也一定對NT默認的目錄權限(Everyone/完全控制)大為不滿,并決定加強ACL設置。但是,這個過程很容易出錯,以至于把ACL調整到沒有一個人能夠正常使用機器的地步。因此最好先做一些試驗,找出適當的平衡點,然后將平衡點的權限配置用模板表達出來,再將模板應用到所有的系統。
3.啟用和禁用服務
模板可以啟用或關閉服務,控制誰有權啟動或關閉服務。你想要關閉大部分機器的IIS服務,只留下個別服務器運行IIS嗎?這可不是一件輕松的工作,因為默認情況下,Win 2K和NT 4.0會把IIS安裝到所有服務器上(可喜的是,Windows Server 2003改正了這一做法。)除了IIS,你可能還希望禁止許多其他不必要的服務,可能還想對Server、Computer Browser、Index、Wireless Zero Configuration之類的服務痛下殺手,但是,到每一臺機器上逐個禁用這些服務實在太麻煩了,好在模板能夠幫助我們迅速完成這些工作。
安全模板允許我們停止(針對服務運行的狀態)以及禁用(針對服務的啟動方式)服務。當你開始了解模板時,會驚奇地發現模板允許我們控制哪些人有權開啟和關閉服務——了解Windows服務的ACL的人可能不是很多,但模板卻提供了調整這些ACL的途徑。例如,如果你想讓Mary有權開啟和關閉Server服務,卻又不想讓Mary成為管理員,現在可以通過模板來設置。
4.調整注冊表授權
安全模板允許我們調整注冊表的授權。注冊表包含了大量只能讀取、不能修改的信息。例如,假設有一個NT 4.0的工作站安裝了AutoCAD,現在把它升級到了Win 2K,但卻發現用戶需要本地管理員權限才能運行AutoCAD。注冊表中究竟發生了什么事情才導致如此怪異的現象?
注重細節的應用程序會在兩個注冊鍵下面保存其配置信息:HKEY_LOCAL_MacHINESOFTWARE和HKEY_CURRENT_USERSoftware。具有管理員權限的用戶負責初始的安裝以及大部分的配置,這些配置信息保存在HKEY_LOCAL_MACHINESOFTWARE注冊鍵下。但是,每一個用戶又必須根據自己的需要和愛好調整應用程序,應用程序需要一個適當的位置來保存這部分配置信息。如果應用程序把所有的配置信息都保存在HKEY_LOCAL_MACHINESOFTWARE,普通用戶每次要修改配置時都要找管理員才行。
正是考慮到該問題,注重細節的應用程序會把非關鍵性的配置選項(用戶個人的配置選項)保存在HKEY_CURRENT_USERSoftware注冊鍵下,所以我們應該讓用戶擁有對該注冊鍵的寫入權限。也就是說,如果用戶沒有管理員權限,那么他至少要有HKEY_LOCAL_MACHINESOFTWARE注冊鍵的讀取權限、HKEY_CURRENT_USERSoftware注冊鍵的讀取和寫入權限。
遺憾的是,許多軟件廠商還沒有重視HKEY_LOCAL_MACHINESOFTWARE、HKEY_CURRENT_USERSoftware這兩個注冊鍵的區別,而是把所有配置信息都保存到了HKEY_LOCAL_MACHINESOFTWARE注冊鍵下。在NT 4.0下,這種處置辦法不會引起問題,因為NT 4.0默認允許所有用戶寫入HKEY_LOCAL_MACHINE,由于NT 4.0控制HKEY_LOCAL_MACHINE的ACL非常寬松,所以即使普通用戶也不會遇到問題。但在Win 2K中,注冊表ACL的默認配置已經變化,非管理員的用戶只有讀取HKEY_LOCAL_MACHINE的權限,所以用戶必須以本地管理員身份登錄才能正常運行AutoCAD。
如何解決這類問題呢?獲取一份應用軟件的新版本,或者將XP、Win2K的注冊表ACL放寬到NT 4.0的程序。如果采用后面的解決辦法,我們既可以用注冊表編輯器(對于XP或Windows Server 2003,使用Regedit,對于Win2K,使用Regedt32)手工執行修改,也可以用模板來調整注冊表的授權。
其實,我們根本不必自己創建修改注冊表授權的模板,微軟已經提供了一個:winntsecurity emplatescompatws.inf。微軟提供的另一個模板winntsecurity emplatesasicws.inf能夠把注冊表授權恢復到Win 2K的默認狀態。
5.控制本地安全策略設置
安全模板能夠控制本地安全策略設置。每一臺機器都有許多本地安全策略設置,例如是否顯示出最后登錄系統的用戶名稱、多長時間修改本地帳戶的密碼,等等。在NT 4.0中,這些設置通過用戶管理器的本地版本(lusrmgr.exe)修改;在Win 2K中,修改工具是本地安全策略管理單元secpol.msc。
手工修改這類設置的步驟是:從控制面板的管理工具中啟動“本地安全策略”,或者點擊“開始”→“運行”,輸入secpol.msc,點擊“確定”啟動本地安全策略管理器。本地安全策略管理器可以用來關閉或啟動系統審核功能、調整密碼管理策略、授予或者收回用戶操作XP和Win2K的許多權限、控制IP安全(IPSec)。實際上,“本地安全策略”管理器可能是Windows默認提供的唯一控制IPSec的工具。
以上就是安全模板能夠調整的五個方面,所有這些安全選項的調整都只要一個安全模板文件就可以完成。
二、如何創建安全模板
下面我們從實踐應用的角度介紹模板的應用,示范如何為工作站或成員服務器創建一個模板,這個模板主要包括三方面的功能:首先,該安全模板能夠控制組的成員,即限制本地的Administrators組只能由本地Administrator帳戶和域的Domain Admins組加入;第二,該模板將設置F:adminstuff目錄的NTFS權限,只允許本地的Administrators組訪問;最后,該模板將禁止Indexing服務。
1.設置工具
我們知道,安全模板其實就是文本文件,因此從理論上講,我們可以用記事本來創建安全模板。不過事實上,用記事本創建安全模板的工作量相當大,如果改用微軟管理控制臺的安全模板管理單元就要方便多了。Windows XP和2K都帶有該工具。
首先打開一個空的MMC控制臺。點擊“開始”→“運行”,輸入“mmc /a”,按Enter鍵打開一個空白的MMC控制臺。
在該控制臺中,點擊“文件”(對于Win2K,點擊“控制臺”)→“添加/刪除管理單元”,打開“添加/刪除管理單元”對話框,點擊“添加”打開“添加獨立管理單元”對話框,在管理單元清單中選擇“安全模板”,依次點擊“添加”、“關閉”、“確定”。接下來就可以開始設置安全模板了。
在控制臺根節點下面有一個安全模板的圖標——一臺加上了鎖的計算機,如圖一。擴展該標記,子節點顯示出了當前系統安全模板的路徑。一般情況下,安全模板位于%systemroot%目錄的security emplates文件夾。擴展該路徑節點,可以看到一組預制的安全模板;依賴于操作系統的版本和已安裝的Service Pack數量,預制安全模板的數量也可能不同。
圖一
例如,XP系統中有一個名為Setup Security的模板,該模板將注冊表和NTFS授權、用戶權限、系統服務的狀態恢復到安裝時的默認設置。如果你在不斷試驗安全選項的過程中搞亂了各種設置,Setup Security模板可以將所有選項快速恢復到默認狀態(當然,如果你想保留某些更改后的安全設置,部署Setup Security模板后這些設置就丟失了)。Win2K系統也有與Setup Security同樣的模板,針對工作站、成員服務器、域控制器,模板也有三個版本,分別是: basicws.inf、basicsv.inf和basicdc.inf。
其他預制模板將系統的安全調整到不同的級別。Securedc.inf(適用于域控制器)和securews.inf(適用于成員服務器和工作站)提供較低層次的安全,hisecdc.inf和hisecws.inf模板則提升系統的安全級別——必須指出的是,雖然“提升安全級別”聽起來很不錯,但在部署hisecdc.inf和hisecws.inf模板之前務必三思而后行,其中一些配置會給XP與Win 2K系統的使用帶來麻煩,特別是在Win 2K和XP系統與NT 4.0、Win 9x系統通信方面。
如果部署了高安全級別的模板后發現這些模板并不適用,你可以重新部署basic*.inf或Setup Security模板將系統恢復到默認設置。預制的安全模板中還有一個compatws.inf模板,它的作用是將系統的NTFS和ACL設置成安全層次較低的NT 4.0設置;在Win XP和2K上,某些早期的應用程序需要部署compatws.inf模板之后才能順利運行。
點擊任意一個安全模板,右邊的窗格顯示出可以利用該安全模板控制的安全選項類別:
⑴ 帳戶策略:控制密碼策略、鎖定策略、Kerberos策略。
⑵ 本地策略:控制審核策略、用戶權利指派、安全選項。
⑶ 事件日志:控制事件日志設置和NT的事件查看器的行為。
⑷ 受限制的組:控制哪些用戶能夠或者不能夠進入各種本地組。
⑸ 系統服務:啟動、關閉各種系統服務,控制哪些用戶有權修改系統服務的啟動方式。
⑹ 注冊表:控制修改或查看各個注冊鍵的權限,啟用注冊鍵的修改審核功能。
⑺ 文件系統:控制文件夾、文件的NTFS授權。
2.創建模板
基本知識已經了解得差不多了,下面就讓我們從頭開始構建一個模板。右擊模板的路徑(圖一是d:windowssecurity emplates,你的Windows可能有所不同),然后選擇菜單“新加模板”,輸入模板的名稱,假設是Simple。新的模板將在左邊窗格中作為一個節點列出,位于預制的模板之下。下面,作為一個試驗,讓我們限制Administrators組、設置F:adminstuff的ACL、關閉Indexing服務。所有這些設置都可以在Simple節點下完成。
首先,我們要設置一下Administrator組,只允許本地的Administrator帳戶和域的Domain Admins組加入Administrators組。擴展左邊窗格中的Simple節點,選中“受限制的組”。如果操作系統是XP,右邊窗格會顯示出“此視圖中沒有可顯示的項目”;如果是Win 2K,右邊窗格保持空白。現在右擊“受限制的組”節點,選擇菜單“添加組”,在新出現的對話框中,點擊“瀏覽”并找到本地工作站或成員服務器的Administrators組。注意,這里我們要加入的是本地的Administrators組,而不是加入域的組;如果你用域的帳戶登錄工作站,“瀏覽”對話框將假定你想要從域加入組(而不是假定你要從工作站或成員服務器的本地SAM加入組)。返回“添加成員”對話框后,點擊“確定”。如果你使用的是XP,可以看到一個“Administrators屬性”對話框;如果是Win 2K,必須右擊右邊窗格中的Administrators然后選擇“安全”才能打開類似的對話框,但Win 2K對話框的標題是“為Administrators配置成員”。
在這個對話框中,如圖二,窗口上方有一個“這個組的成員”清單,窗口的下方有一個“這個組隸屬于”清單。點擊上面清單旁邊的“添加”按鈕打開“添加成員”對話框。
圖二
如果是Win 2K,點擊“瀏覽”按鈕并選擇域的Domain Admins組;如果是XP,點擊“瀏覽”按鈕打開的是一個“選擇用戶”對話框,如圖三,但Domain Admins不會出現在列表中,你必須首先點擊“對象類型”,選擇“組”,點擊“確定”返回“選擇用戶”對話框,選擇(或者輸入)Domain Admins。按照同樣的步驟加入Administrator帳戶。
圖三
接下來我們設置模板的第二部分,使得任何擁有F:adminstuff文件夾的系統把該文件夾設置成只允許本地管理員訪問。在左邊窗格中,右擊“文件系統”,選擇“添加文件”,在“添加文件或文件夾”對話框中找到或者輸入f:adminstuff目錄。
點擊“確定”,出現一個標準的NTFS權限設置對話框。現在刪除所有默認提供的授權規則,加入對本地Administrators組的“完全控制”授權。注意NTFS安全設置對話框里還可以調整高級NTFS選項,例如設置審核功能、所有者權限等。點擊“確定”,系統會詢問是否把權限設置傳播給所有子文件夾和文件,根據需要選擇一個選項,點擊“確定”。
自CodeRed和Nimda肆虐以來,Indexing服務就引起了人們擔憂,在不必使用該服務的系統上,最好的選擇就是將它關閉。在控制臺左邊的窗格中,點擊“系統服務”,在右邊窗格中右擊Indexing服務,選擇“屬性”(對于XP)或者“安全”(對于Win 2K)。在“Indexing Service屬性”對話框中,如圖四,選中“在模板中定義這個策略設置”,這時系統顯示出“安全設置 Indexing Service”對話框,現在我們不需要設置該對話框的選項,因此點擊“取消”返回圖四的對話框。在圖四對話框中選擇“已停用”,然后點擊“確定”。
圖四
右擊控制臺左邊窗格中的Simple模板,選擇“保存”。現在winntsecurity emplates或windowssecurity emplates目錄下有了一個Simple.inf文件。
激活安全模板的命令是Secedit,命令語法為:secedit /configure /cfg /db /overwrite /log 。其中templatefilename是模板文本文件的名稱(本例是D:windowssecurity emplatessimple.inf),databasefilename是安全數據庫文件的名稱。
安全模板有點象程序的源代碼:人可以閱讀,但計算機不能直接識別,就象程序的源代碼必須編譯成二進制執行文件一樣,安全模板也必須轉換成二進制格式的安全數據庫。Secedit既能夠編譯模板文件,也能夠部署二進制的安全數據庫,但我們必須為安全數據庫指定路徑和文件名稱,例如C:securitysimple.db。
最后,Secedit還要報告處理經過和結果,我們要指定一個日志文件的名稱,例如C:securitysimple.log。/overwrite選項告訴Secedit覆蓋任何同名文件。因此,本例中完整的Secedit命令應該是:secedit /configure /cfg D:windowssecurity emplates simple.inf /db C:securitysimple.db /overwrite /log C:securitysimple.log。這個命令有點長,但顯然要比到每一臺機器上手工修改各個安全選項方便多了。你不妨試著編輯和部署幾個模板,相信這個強大的工具一定會讓你愛不釋手。
