.NET Framework 安全系统是由一个被称为安全策略的可配置规则集而被支配的。这个策略允许终端用户或者管理员来调整相应的设置,从而检测哪种资源代码才是被允许访问的并且最终决定哪种代码才是被允许根本运行的。
例如,假设你是一个企业设置的管理员并且你不信任来自于特定公司的软件。或许该公司生产用于雇员寻找乐趣的软件,但是引起日益增长的网络通信量或者引起工作站变得不稳定。那么你就可以设置一种企业级别的安全策略,并且以一个针对你的计算机资源的特定强命名密码(程序的唯一标识符)来限制该软件的访问。你同样也可以设置一种防止这个发布者的软件从根本上运行的策略。
这个主题提供了安全策略管理的概览。关于额外的信息,参考[安全策略管理]。
证明,代码分组和许可集
基于公共语言运行时的代码被布署在被称为汇编集的单元中。在装载的时候,运行时会检查每种汇编集的证明,从而识别关于该汇编集(比如代码作者的数字签名和代码最初的位置)的信息。基于证明和公共语言运行时的安全管理器就会把汇编集映射到一个基于安全策略的代码分组。代码分组是定义来测试特定的证明窗体并且拥有与其相关联的许可集。属于代码分组的汇编集会接收由相关联的许可集而被定义的许可。更多关于证明,代码分组和许可集的信息,参考[安全策略模型]。
许可
许可是呈现被保护资源的访问权利的简单对象。许可是可配置的并且一个简单的许可对象可以假设若干窗体。例如,FileIOPermission 就呈现了对本地硬盘中的文件进行访问、创建、读取,写入或者更改的权利。至于更深的意义,许可还必须包含它的呈现访问类别的特定信息。你可以配置 FileIOPermission 来呈现对于特定文件的读取权利、或者对于特定文件的读取与写入权利,或者在整个目录中读取特定文件。权利呈现和接收汇编集的权利都可以由计算机管理员进行完全的配置。虽然应用程序可以像其他对象一样来构造并且配置许可对象,但是只有安全策略才可以批准对于应用程序的许可。管理员最终会控制许可批准。关于公共许可的列表,参考[代码访问许可]。
安全策略级别
这里有四种由安全模型所定义的安全策略级别,从而符合不同的管理与托管情节。下表对每种级别进行了描述。其中企业策略级别是最高的级别,而应用程序域级别则是最低的级别。
策略级别 | 描述 |
---|---|
企业策略 | 由设置企业域策略的企业管理员而被定义。 |
机器策略 | 由设置机器策略的机器管理员而被定义。 |
用户策略 | 由设置单独登录帐号策略的用户而被定义。 |
应用程序域策略 | 由设置装载时策略的运行时托管(托管公共语言运行时的任何应用程序)而被定义。这个级别无法被管理。 |
每种策略级别都是由一个层次化的代码分组所组成的。并且每种策略级别的管理员都可以创建属于他们自己的代码分组和相关联的许可集。在装载时,代码访问安全系统会检查所有策略级别并且结果许可批准是每种级别中所有被允许许可的交集。低级别策略的管理员不可以放松更高级别中的策略决定,但是他们可以紧收他们所需要的策略。默认的安全策略位于机器策略级别中。
默认的安全设置如下所示:
- 用户与企业级别被设置成不受限制。
- 机器级别包含了特定的策略设置与限制。
- 由所有三种级别所定义的设置组成默认的设置。
注意不受限制的用户与企业级别不会导致不受限制的许可被批准给汇编集。因为机器级别定义了若干限制,并且所有这三种级别都被认为是一个整体,所以许可批准结果并不是不受限制的许可。关于更多信息,参考[安全策略模型]。
把代码分组映射到许可集
你可以通过把代码分组映射到策略级别或者你所管理的级别中的许可集来管理策略。
代码分组中包含了一个成员条件,一个许可集关联和代码分组特性。汇编集的证明会防止运行时比较你为代码分组而指定的成员资格条件。如果汇编集提供了匹配成员资格条件的证明,那么这就是被允许的代码分组入口。管理员还可以通过指定成员资格条件来识别汇编集并且把它们归类到代码分组中。另外,代码分组特性可以被用来指定当前级别之下的非策略级别应该是被考虑的或者在指派许可的时候除了当前代码分组之外没有其他的需要被考虑。
下列内建的证明类别可以当成成员资格条件来使用:
- 应用程序的安装目录
- 汇编集的密码混列码
- 汇编集发布者的数字签名
- 来自于汇编集起源的站点
- 汇编集的强命名密码
- 来自于汇编集起源的 URL
- 汇编集起源的区域
你可以把许可简化或者增加到基于任何成员资格条件组合的汇编集。因为自定义的成员资格条件是可以被创建的,并且上述列表并没有呈现所有可能。关于更多信息,参考[证明]。