说明
DACL末端的拒绝存取ACE是浪费的。假如ACE拒绝已经允许的存取动作,则存取检查连末端的拒绝ACE也不会看。而如果ACE拒绝没有明确的允许存取,那么一开始就拒绝存取是没有必要的-除非它被明确地允许,否则即表示它暗示地拒绝该存取动作。
Microsoft已经发表DACL中的ACEs惯用顺序,称为「惯用的」顺序,因为它不完全是强制执行的。表10-6显示了DACL中ACEs惯用的顺序。
| 表10-6 DACL中ACEs惯用的顺序 |
| ACE类型 | 群组 |
|---|---|
| 拒绝存取的ACEs 拒绝存取对象的ACEs,适用于子对象或对象的属性 允许存取的ACEs 允许存取对象的ACEs,适用于子对象或对象的属性 |
明确地指派(非继承)ACEs |
| 拒绝存取的ACEs 拒绝存取对象的ACEs,适用于子对象或对象的属性 允许存取的ACEs 允许存取对象的ACEs,适用于子对象或对象的属性 |
继承ACEs |
表10-6中的顺序规则看起来可能有点复杂,但请记得,系统中除了目录服务对象(Active Directory中的对象)外,并非所有的安全对象都使用对象ACEs。忽视对象ACEs将会大大地简化ACEs的顺序。
认识自订或私人对象安全性
我们已经讨论过系统安全对象、保护对象安全的安全描述项结构,以及系统如何使用DACL检查安全性,以防备软件的请求。然而,我还未说明如何让软件使用Windows安全模组建立安全对象。Windows提出此功能为 安全私人对象 。
私人对象安全性是包含在Windows中的一个非常强大且具有弹性的特色。在本章的后续部分,将会讨论与私人对象一起使用的安全性API。此时,要先说明如何将私人对象安全性与Windows现有的安全模组结合。
除了您的软件外,您已学习之有关安全描述项、ACLs、DACLs及ACEs的每件事皆适用于私人对象上,并非系统,您必须决定哪个标准权利(列于表10-13)适用于您的对象。此外,您必须为您的对象定义特殊的权利,并将四个通用权利对应到适当标准及特殊权利的结合上。
您的软件经由呼叫系统函数来执行存取检查。通常,您的软件是个服务,它传递相关的客户端权杖到安全描述项的系统中。然后系统会指出是否拥有客户端要求的存取权利。根据存取检查的结果,您的服务应对执行或拒绝执行要求的动作负责。
系统为您的私人对象建立及删除内存中的安全描述项。您必须将安全描述项与他们保护的资料联系在一起。当服务结束时,它也应负责储存安全性与资料到永续性储存体(Persistent Storage)上(假设对象为持续的情形)。
说明
私人对象安全性不会自动地保护软件定义的对象资料安全性-假如您的对象储存在文件中,您还必须保护文件的安全。然而,私人对象安全性提供可让您以更细微的层级控制资料的机制,而不须受限于文件安全或Windows中其他储存机制的安全性。
浏览Windows的安全性
为了成为一个成功的安全性开发人员,了解及熟悉Windows 2000安全性是很重要的。花些时间在利用使用者介面修改系统对象的安全性上,将大大地使您增加有效地设计安全性软件的能力。
以下的章节将带领您贯穿Windows提供的工具,并帮助您熟悉安全性的内容。在Windows中,可使用登录机码、文件及目录(只在NTFS分割上)取得安全性。文件系统可能是熟悉安全性的最有效方法,因为它的继承模组包含容器对象(目录)及非容器对象(文件)。假如您没有可用NTFS分割区,则可以使用登录。
登录的存取控制
这些步骤叙述如何将安全性选项指定到登录中的方法:
- 以管理员或管理员群组的成员身分登录您的系统。
- 执行RegEdt32.exe公用程序,您将看到类似图10-4的画面。
图10-4 登录编辑器(RegEdt32.exe)
| 图10-5 为ANewKey设定继承的权限 |
