系統管理員在得到了用戶的權限申請后,可以根據情況考慮是否賦予用戶相應的權限,在這里我們來看一下相應代碼權限設置的具體方法。
在我們安裝成功.NET Framework之后,在Windows 2000 Server的管理工具里多了兩項管理工具: Microsoft .NET Framework Configration和Microsoft .NET Framework Wizards。這兩種管理工具要實現的功能差不多,只不過Microsoft .NET Framework Wizards是通過向導方式設置,如果您對于.NET Framewrk的安全性操作不是很熟悉的話,可以使用向導根據系統提示一步步的來設置相關的權限。
Microsoft .NET Framework Wizards界面 |
Microsoft .NET Framework Wizards界面 |
使用Microsoft .NET Framework Wizards可以簡單的設置.NET Framework的權限。但是我們為了更好的管理各個代碼的權限,還是使用Microsoft .NET Framework Configuration來詳細的設置我們所需的權限。
(Microsoft .NET Framework Configuration主界面) |
在Microsoft .NET Framework Configuration中可以設置所有關于.NET Framework的屬性。
點擊我的電腦,打開下拉菜單,我們可以看到程序集緩存、已配置程序集、遠程處理服務、運行庫安全策略、應用程序等五項。運行庫安全策略設置是我們這篇文章的重點。
我們可以先查看一下程序集緩存,在這里我們可以看到所有的全局程序集緩存,全局程序集緩存中存儲了專門指定給由計算機中若干應用程序共享的程序集。在這里我們可以發現我們可以使用的所有的程序集,同時也可以添加和刪除某些程序集。詳細操作請參見.NET Framework SDK文檔。
我們在這里主要討論的是運行庫安全策略。在此策略中,按層次結構由高到低分為四個級別,即:企業、計算機、用戶、應用程序。在計算權限授予時,運行庫從該層次結構的頂部開始,然后向下進行計算。較低的策略級別不能對在較高級別上授予的權限進行增加,但是可以使權限減少。這就是說如果我們將計算機策略設置為較小的權限時,可以不必更改企業策略就可以使設置的權限生效,也就是說權限檢查的順序是從低級別到高級別,只有在低級別中不存在的設置才會檢查上一級的設置。默認情況下,用戶策略和應用程序域策略的限制性小于計算機策略和企業級策略。大部分默認策略存在于計算機級別。所以我們需要將默認安裝的主機的權限在計算機級別上進行修改,修改的內容根據主機是不是共享主機,主機應用的其他不明代碼的可能性來設置。如果是我們討論的共享主機的話,在計算機級別上就盡量將權限設的小一些,為了避免我們討論的文件系統安全問題,一定要注意權限中的本地磁盤訪問權限。
我們打開計算機策略設置可以發現幾個默認的代碼組、權限集和策略程序集。
根據需要,我們可以添加代碼組和自定義的權限集。
在添加代碼組的時候可以選擇幾種條件,主要的條件類型:默認為All Code、應用程序目錄、哈希、強名稱、作者、站點等。
對于我們所要討論的共享主機,我們需要將My_Computer_Zone下的All Code的權限更改為不能進行磁盤讀寫,在更改之前,我們需要先定義一個權限集。這一權限集的作用就是將我們需要點擊權限集,右鍵快捷菜單中選擇新建,會出現一個創建權限集的窗口,這里需要給我們新建的權限集命名。下一步就是將單個權限分配給權限集。如下圖所示。
在這里我們可以給這個新建的權限集賦予一個的系統權限,如上圖所示,可用的權限包括:目錄服務、DNS、事件日志、環境變量、文件IO、OLEDB數據庫操作、注冊表等等。我們主要要說明的是文件IO操作,其他的權限操作可以根據自己的需求來設置。這里我們就不再說明了。
在文件IO的權限設置中我們可以自定義針對每一個目錄的權限,這里包括讀、寫、追加、路徑盤等操作,在這里我們可以將我們需要的目錄權限添加到列表中。因為我們是利用這一權限使所有沒有配置權限的代碼不可以進行文件IO操作,所以我們不強文件IO添加到分配的權限中。
新建了這一權限集后,我們更改一下默認設置,即將All Code的權限設置為此新建的權限集,也就是說所有沒有在此定義代碼都不能訪問文件IO系統。
這里需要注意一件事情,因為Microsoft .NET Framework Configuration本身也需要文件IO權限,如果沒有單獨分配給Configuration一個文件IO操作權限的話,那么您就不能再次使用Configuration來設置權限了,只能重新安裝.NET Framework了。所以我們需要將FullTrust權限分配給Configuration所使用的Dll,即mscorcfg.dll。在添加時,成員條件可以選擇強名稱,使用"導入",到winnt/window .net/framework/versionnumber/下選擇mscorcfg.dll。如果需要運行其他配置程序,還需要設置相應的權限,這些系統程序一般都在系統程序集緩存中。
這樣我們就完成了一個簡單的設置,可以防止任何未經驗證的代碼訪問文件IO系統。這樣就從根本上防止了磁盤惡意操作。
如果您今后需要利用這一功能或者有共享主機用戶需要使用文件IO功能,那么您可以在Microsoft .NET Framework Configuration中將其加入代碼,如果不能使其使用其他功能,可以僅僅設置一個只具有文件IO權限的權限集。如果是共享主機用戶您還可以給他分配直接到其所使用的目錄的全部讀寫權限,對于他的日志文檔,您可以將讀功能分配給用戶。通過上邊新建權限集時我們可以發現:權限集可以規定到每一個目錄的讀寫權限,所以可以將用戶鎖定于其可以使用的目錄中。當然對于共享主機提供商來說,最好的方法就是自己實現這些功能,然后配置權限系統使用戶使用共享主機提供商的程序來實現他們的正常操作,而避免了惡意文件操作。
需要注意的是如果分配給每一個單獨的程序相應的權限時,我們最好使用強名稱這一方式或者其他的可驗證方式,強名稱由程序集的標識--其簡單文本名稱、版本號和區域性信息(如果提供)--加上公鑰和數字簽名組成。這就需要我們使用Sn.exe 來設置密鑰、簽名和簽名驗證。強名稱保證了程序是開發人員開發的并且沒有被改動。
在進行上面的設置之后,管理員可以根據用戶的各種需求來設置不同的代碼集和權限集。
我們已經簡單的介紹了一下ASP.NET中關于文件IO系統的漏洞的防治方法,這一方法有些繁瑣,但是卻可以從根本上杜絕一些漏洞,由于.NET的JIT(運行時編譯)和IL(中間語言),.NET可以在程序編譯時檢查程序的安全性設置,所以能從根本上防止一些非法訪問。.NET的代碼安全性的內容很全面,我們討論的只是很少的一部分,更多的功能需要大家共同來探索、學習。