分类: 嵌入式
2012-06-23 17:03:19
代码组为我们提供了通过配置方式来实现代码访问安全性的途径。通过代码访问安全性策略工具——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 指定权限集的名称和说明。
填写完名称和说明之后,要为权限集指定它所包含的权限,如图1-8所示。
图1-8 为权限集指定权限
至此,完成了一个代码组添加,其中涉及的成员条件和权限集等的定义方法和操作方式将在后续内容中做详细介绍。
选中要修改的代码组,单击右键,选择“属性”,如图1-9所示。
图1-9 修改代码组
从图1-9中可以看出,可以修改代码组的成员条件、权限集的相关信息。
删除代码组的操作比较简单,选中要删除的代码组,单击右键,选择“删除”,如图1-10所示。
图1-10 删除代码组