程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 提高IIS的安全性

提高IIS的安全性

編輯:ASP技巧

概要:使用IIS的省缺設置就象把你屋子的鑰匙給了別人,本文教你如何把門鎖上。(本文不是100%直譯,括號中的是討飯貓的廢話)

沒有任何系統是100%安全的,系統漏洞會不斷地發現,這是因為黑客和系統管理員一樣也在整天看著新聞組,收集著這方面的信息。黑與反黑之間的戰斗會永遠進行下去。

如果你采用IIS的省缺設置,那你在這場較量中就已經處於下風。Windows NT省缺下被安裝為一個開放的服務器,即使是菜鳥hacker也能得手。但只要你做下面幾個簡單步驟,情況就會有很大改善。雖不敢說攻無不克,至少可以保護你的數據不象小克的拉鏈門一樣世人皆知。

一個安全的系統要有多層保護。一般的計算機系統有三層保護,物理層,網絡層,文件系統。物理層就是保護好計算機硬件本身,硬盤,軟盤不被偷走,這就不用我多說了。網絡層是要保護與Internet和本地LAN的網絡連接,主要是靠防火牆和端口的存取權限設置。最裡面的是文件系統,這也是大多數攻擊的目標。下面我們主要也就講這方面。

省缺設置的問題

NT省缺設置成一個開放系統,文件系統是幾乎完全沒有安全設置的,網絡上的任何用戶都可以讀寫刪除其中的文件。這主要原因是NT中大量使用了 Everyone 組(更可怕是省缺給 full權限),理論上,地球上任何用戶都屬於everyone組。相比之下,NetWare就設置為一個封閉的系統,安全性就好很多。為什麼Microsoft要做這種蠢事?原因可能是給最大權限可以減少許多因為權限問題帶來的技術支持電話吧。(是這樣嗎?)

IIS同樣也有很多問題。安裝IIS時,系統建立一個前綴是IWAM_(早期版本是IUSR_)的帳戶,該帳戶屬於Guest組,能夠存取Guest組和Everyone組權限下的所有文件。在省缺安裝下,90%的系統文件可以被該用戶訪問。

看來解決方法就是刪除所有的everyone組權限了,但實際上這樣做行不通。因為IIS不僅要存取Html文件,還會調用Script和ActiveX控件,還涉及到DLL的執行,全部取消Everyone組權限會使系統出現這樣那樣的問題。所以要使用一些系統安全工具來一步步做。

系統安全工具

熟悉以下NT系統自帶的安全工具是很重要的:

User Manager(usrmgr.exe)
IIS 4.0: Microsoft management console (MMC.EXE)
IIS 3.0: Internet service manager (INETMGR.EXE)
Registry editor (REGEDT32.EXE)
(介紹省略,不相信你沒用過)

Command line ACL editor (CACLS.EXE)
這個工具可能知道的人不多,也是NT自帶,用於管理Access control list(ACL)。

Control panel, system applet
該工具用於管理系統環境變量。

步驟一:使用專用的Web組

1 用user manager建立一個名為WWW的本地組
2 將IWAM_賬號從Guests組中刪除,加入WWW組
3 賦予WWW組“Access this computer from the network”權限,讓IIS能執行一個本地登錄操作
4 重起WWW服務
5 在Web根目錄下執行命令行操作:

CACLS <DIR>\*.*  /T /E /C /G WWW:R

參數        Meaning
<DIR>\*.*    Web根目錄。在  With IIS 4.0 中通常是 C:\Inetpub\WWWRoot.   
/T    作用於所有的目錄和子目錄   
/E    編輯ACL,不是替換   
/C    有錯誤停止執行.   
/G WWW:R    賦予WWW組Read權限   

這樣Web目錄下的所有文件都承認WWW組的讀權限了。別忘了在其他包含Web內容的目錄下執行這個命令(主要是虛擬目錄)

步驟二:刪除Everyone組

完成以上操作後,Internet用戶只能看所允許的文件了。但這還不夠,因為everyone組還存在,現在需要將everyone組從計算機中的所有文件中清除出去。
但清除everyone組不象想象的那麼簡單。省缺下,許多Microsoft DLL文件在ACL中之只列了everyone組。如果一桿子打到底,這些DLL文件就無人可以訪問了。因為一刪除everyone組,ACL就空了,空的ACL意味著任何訪問者都沒有權限。執行以下命令:

CACLS C:\*.* /T /E /C /G Users:F /R Everyone

參數    Meaning
/G Users:F    賦予Users組所有權限
/R Everyone    取消Everyone組所有權限

這樣可以保證ACL中不為空。然而這樣做帶來兩個問題:本機完全開放給本地網絡;變動太多的系統文件權限。最好的方法其實是找出那些文件只有everyone組權限,不幸地是WindowsNT沒有提供該功能,但有一些第三方工具能做到這個功能。(原文中沒有提到到底是哪些工具)如果有這些工具的話,該命令改為:

CACLS C:\*.* /T /E /C /R Everyone

步驟三:處理數據庫

如果你的系統包括數據庫或ActiveX,例如搜索引擎,guest book什麼的,那還需要執行步驟三。對於guest book,執行:

CACLS /T /E /C /G WWW:C

參數    Meaning
/G WWW:C    賦予 WWW 組change權限.

這時,你可能會發現從Web上還是無法更新guest book,甚至連數據庫讀操作都無法執行。如果出現這種情況,你一定是使用了ODBC連接數據庫。問題就出在ODBC的臨時文件。當ODBC 建立時,系統會建立一個臨時文件記錄鎖定信息等。省缺情況下,這些文件是存放在system32目錄下。Internet用戶是沒有在該目錄下寫和創建的權限的。比較好的解決辦法是指定另一個Internet用戶有權限的目錄來存放ODBC臨時文件。在Control Panel的system applet中加入以下系統變量

變量   
TEMP    %SystemDrive%\TEMP
TMP    %SystemDrive%\TEMP

然後給該目錄授權:

CACLS C:\TEMP\*.* /E /C /G WWW:F

然後重啟機器。

步驟四:ActiveX 部件

如果使用asp去連結數據庫,還會有問題。ASP使用ActiveX部件ADO 去訪問數據庫。一個ASP連結數據庫的典型語法是:

var DBConn = Server.CreateObject('ADODB.Connection');

ADODB.Connection是一個PRogram ID,實際上是一個文件。在實際使用中要被翻譯成實際的地址以便調用。這個信息被記錄在注冊表的 HKEY_CLASSES_ROOT 段中。現在明白要改什麼了嗎?就是要給ADODB.Connection所在目錄加上WWW組的讀權限。用Regedit去找到該目錄吧。

祝賀你

你現在已經使你的系統安全很多了。但記住,hacker會不斷尋找新漏洞來攻破你的系統,所以這種安全性設置只是與hacker進行的第一場戰役。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved