对NTFS分割区的存取控制
以下是说明NTFS分割上的文件权限运作范例:
- 为了检视文件的权限,在Windows浏览器中的文件或资料夹上点选右键,然后从环境功能表中选择属性,以显示属性对话方块,选择安全性页签以显示文件的权限。设定文件权限大部份是以同样的方法,也就是RegEdt32中的登录机码。
- 在属性对话方块中,点选进阶钮以显示存取控制设定对话方块,如图10-6所示。新增非继承的存取权限,或新增只继承到非容器(或文件)的存取权利。

图10-6 设定NTFS分割上的文件权限
此处强烈地建议您花更多时间来试验登录机码或文件的权限(假如您有NTFS分割)。浏览这些内容将有助于您具有成为一位安全性程序设计师的能力。
存取控制术语复习
假如您对Windows的安全性程序设计不熟悉,刚才已经连续向您提出了几个新术语及观念。所以在我们潜心研究安全性API的奥秘前,正好可以重新复习一下我们已经学习的部分。
- 存取检查 由系统(或您私人对象的软件)执行的检查,用来决定由权杖识别的使用者是否拥有某个对象之DACL允许的存取权利组。
- 存取控制 系统为了对对象安全性存取之管理及实施所提供的特色。
- 存取遮罩 ACE内部的32位元值,为对象的每个存取权利包含了一个位元,包括标准、特殊及通用权利。
- 存取权利 系统或软件定义的值,指出在安全对象上或与安全对象一起执行某些动作所须的权利。
- ACE 代表存取控制项目。ACE包含了一个识别系统信任成员的SID,以及指出存取权利的存取遮罩。ACE可以允许或拒绝存取某个对象。
- ACL 代表存取控制清单。ACL包含了定义安全性的ACEs或某个对象的安全性报告。
- DACL 代表判别存取控制清单。DACL包含了明确地允许及拒绝存取某个对象的ACEs。
- 通用存取权利 一般的「读取」、「写入」或「执行」某个对象的权利,以及通用的「所有」存取权利。每个通用权利皆对应到一组标准及特殊权利;这些对应会因为对象的每个类型而不同。
- 保护的安全描述项 一个具有控制标记的安全描述项,指出它和它的子系不该从它的父对象接受可继承的ACEs。
- SACL 代表系统存取控制清单。SACL包含了ACEs为相关的使用者指定应被记录到事件日志的事件。
- 安全的对象 任何被Windows存取控制模组保护的私人或系统对象。
- 安全描述项 与系统中每个安全对象关联的结构。安全描述项包括指出拥有者及主要群组的SID,以及非必需的DACL及SACL。
- SID 代表向系统识别信任成员帐户的安全识别项。第九章中有SIDs的详细讨论内容。
- 特殊的存取权利 由系统或软件定义只适用于特定的系统类型或私人安全对象的存取权利。
- 标准的存取权利 由系统定义的存取权利,其子集合将被应用到系统中的每个安全对象类型上。
- 权杖 一个与程序或线程相关联的结构,包含识别使用者及使用者群组的SIDs与使用者持有的权限。第十一章会对权杖做详细的讨论。
- 使用者内容 假如软件在您的权杖下执行,那就是表示在您的使用者环境中执行。
存取控制的程序设计
在这一节中,我们将讨论如何有计划地操作Windows中的安全性,我们将从相关步骤的概念开始谈起。
安全性任务的基本步骤
不管您处理的对象类型为何,其修改安全对象之安全性方法大致相同。您通常会执行两个工作中的其中一个:即建立一个具有安全性的新对象,或者变更现有对象的安全性。以下是您在建立具有安全性对象时将执行的基本步骤:
- 编辑SIDs清单,您将为SIDs建立拒绝及允许的ACEs。
- 建立及初始化安全描述项。
- 建立及初始化够大的DACL,以保存所要求的ACEs。
- 新增ACEs到DACL。
- 新增DACL到安全描述项。
- 使用新的安全描述项建立对象。
- 依照您所需的情形整理。
从一个安全对象类型到下一个类型的操作时,只有步骤六会不同。若要修改现有对象的安全性,请按照以下这些步骤执行:
- 编辑SIDs清单,您将为SIDs建立拒绝及允许的ACEs到对象的DACL。
- 取得对象的DACL。
- 为您想要移除的ACEs检查现有的DACL,然后移除它们。
- 为您新增的ACEs检查现有的DACL,以便您可以大量地避免再次新增它们及不必要的建立。
- 建立一个够大的DACL,以容纳除了新的ACEs外,还有修改过的「旧的」DACL。
- 复制旧的ACEs及新增的ACEs到「新的」DACL。
- 设定DACL给对象。
- 依照您所需的情形整理。
在这个处理程序中,从一个安全对象类型到下一个类型的操作,只有步骤二(取得DACL)及步骤七(请求DACL)会有所不同。
不要使自己被这些处理程序压垮。我将详细地讨论每个步骤,并且叙述选择的几个步骤。在此处提及这些程序的目的,是为Windows中的 任何一个 安全对象显示一般的方法。
如您所见,一旦熟悉了修改对象安全性的方法后,就会拥有修改任何对象安全性所需的技术(甚至是程序代码)。修改方法中的主要差别在于安全性的取得及设定部份。如果您已经知道与您相关的对象类型应使用哪个函数,则您已经准备好了。请看表10-7。
