代碼組為我們提供了通過配置方式來實現代碼訪問安全性的途徑。通過代碼訪問安全性策略工具——Caspol.exe,可以創建、刪除、更改代碼組。
代碼組實質是一個條件表達式和一個權限集。如果程序集滿足該條件表達式,那麼就會被授予該權限集。每個策略級別的代碼組集是按樹的形式組織的。
代碼組同時可以通過屬性來說明如何定義安全策略。
對代碼組的管理可以使用兩個工具,一個是.NET Framework配置工具,一個是Caspol.exe。為了演示這兩個工具的使用,對代碼組的查看采用Caspol.exe,從命令行操作;對代碼組的創建、修改和刪除,使用.NET Framework配置工具從圖形界面來操作。
查看代碼組
首先啟動Visual Studio Command Prompt(2010),然後從該命令行啟動訪問安全性策略工具Caspol.exe。可以在命令行輸入“-?”來查看Caspol.exe的命令幫助,如圖1-1所示。
圖1-1 查看Caspol.exe的命令幫助
接下來,使用代碼清單1-1的命令來查看不同策略級別下的代碼組。
代碼清單1-1 查看不同策略級別下的代碼組
//查看公司級別的代碼組 caspol –enterprise –listgroups //查看計算機級別的代碼組 caspol –machine –listgroups //查看用戶級別的代碼組 caspol –user –listgroups //查看所有級別的代碼組 caspol –all –listgroups //查看默認級別的代碼組 caspol –listgroups
圖1-2顯示了查看計算機級別下的代碼組的結果。
圖1-2 查看計算機級別下的代碼組
注意:若使用Caspol.exe 列出處於默認策略級別的代碼組,對於計算機管理員,默認級別是計算機策略級別;對於其他人員,默認級別是用戶策略級別。
代碼清單1-2列出了查看一個策略級別下的代碼組名稱和說明的命令。
代碼清1-2 查看一個策略級別下的代碼組名稱和說明
//查看公司級別下的代碼組名稱和說明
caspol –enterprise –listdescription
//查看計算機級別下的代碼組名稱和說明
caspol –machine –listdescription
//查看用戶級別下的代碼組名稱和說明
caspol –user –listdescription
//查看所有級別下的代碼組名稱和說明
caspol –all –listdescription
//查看默認級別下的代碼組名稱和說明
caspol –listdescription
代碼清單1-3是執行查看用戶級別下的代碼組名稱和說明的命令結果。
代碼清單1-3 查看用戶級別下的代碼組名稱和說明
D:\Program Files\Microsoft Visual Studio 10.0\VC>caspol -user -listdescription
Microsoft (R) .NET Framework CasPol 4.0.21006.1
Copyright (c) Microsoft Corporation. All rights reserved.
Policy change prompt is ON
Level = User
Code Groups:
1. All_Code: Code group grants all code full trust and forms the root of the code group tree.
Success
創建代碼組
啟動Mscorcfg.msc,展開運行庫安全策略,可以看到各個安全級別下的配置內容,如圖1-3所示。
圖1-3啟動Mscorcfg.msc
以計算機級別為例來添加代碼組,首先展開整個代碼組樹,查看已經存在的代碼組,如圖1-4所示。
圖1-4 查看已經存在的代碼組
可以在任何一個代碼組下選擇新建它的子代碼組,填寫代碼組名稱和說明,如圖1-5所示。
圖1-5 創建代碼組
然後單擊“下一步”,選擇代碼組條件類型,如圖1-6所示。
圖1-6 選擇代碼組條件類型
對於代碼組條件類型,有以下幾種選擇:
1)所有代碼(All Code)。此成員條件對於依據此條件的所有程序集均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
2)應用程序目錄。對於位於正運行的應用程序的同一目錄或子目錄中的所有程序集,“應用程序目錄”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
3)GAC。對於GAC安裝的所有程序集,GAC成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
4)哈希。對於匹配MD5或者SHA1算法的所有程序集,則“哈希”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
5)發行者。如果程序集使用了與指定的發行者證書匹配的證書進行了數字簽名,則“發行者”成員條件為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
6)站點。對於來自指定站點名稱的程序集,“站點”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
7)強名稱。對於強名稱,符合我們指定的強名稱的程序集,“強名稱”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
8)URL。對於源自指定URL的所有程序集,“URL”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。
9)區域。對於源自指定區域的所有程序集,“區域”成員條件均為True。滿足此條件的程序集都將被授予此代碼組關聯的權限。區域為Internet、Intranet、我的電腦、受信任站點和不受信任站點中的一個。
10)自定義。可以將成員條件定義在XML文件中,然後導入。
選擇成員條件之後,要決定是選擇現有的權限集還是創建新的權限集,如圖1-7所示。
圖1-7 選擇使用權限集的方式
選擇創建新權限集,然後指定它的名稱和說明,也可以導入定義好的權限集,如圖1-7所示。
圖1-7 指定權限集的名稱和說明。
查看本欄目