说明
建立一个不允许从父系继承ACEs的对象安全描述项是可能的,这样的描述项称为 保护的安全描述项 ,它阻止对象和子对象的继承,不过却不影响父对象或任何其他父系子成员的安全描述项。
系统记录了哪个ACEs被继承及明确地指定给对象的内容。如此一来,如果安全描述项在对象被建立后即被设定为保护的安全描述项,那些系统会知道要从DACL及SACL中移除哪个ACEs。并且会明确指定对象的ACEs优先于被继承的ACEs。
存取检查
您现在应该对如何维持一个安全对象的防护有了概念。我们将很快地开始讨论安全API的部份,但是您必须先了解存取检查的内容。
当您登录执行Windows 2000的系统时,会输入您的使用者名称。系统会寻找您所属的成员使用者帐户及群组信任成员帐户,并储存每个信任成员帐户的SID到一个称为 权杖(Token) 的内部结构中。系统也储存指派给您的信任成员及群组信任成员帐户权限清单。您将在第十一章中学到更多关于权杖的内容,但您现在应该将权杖视为一个储存身分及权限的结构。
系统为您建立权杖及启动Shell处理后,会将您的权杖与Shell联系在一起。从此之后,Shell执行的任何处理程序皆会自动启动继承您的权杖副本。这就是系统维护身分识别的观念。
与您权杖相关的处理程序在您的使用者环境或安全性环境中执行。当安全性环境执行的程序试图在安全对象上执行安全动作时,系统首先会执行存取检查,以确定您或其中一个群组是否有足够的权利去执行这个任务。图10-3显示了包含在存取检查中的实体关系。
| 图10-3 存取安全对象的程序 |
说明
程序中的线程也有可能在使用者环境中执行,这与程序不同,称作 模拟 ,详细说明涵盖在下一章。
以下为系统执行存取检查时采取的步骤:
- 系统对应要求标准通用权利及特殊权利。
- 系统为这个存取检查中有关的权限检查您的权杖。大部分的存取检查不考虑权限。然而,如果您持有SeTakeOwnershipPrivilege权限,系统会永远通过WRITE_OWNER标准权利的存取检查(请参阅
说明
您可以建立一个受额外存取权利限制的权杖,并任意地选择信任成员帐户。称为 受限权杖 。假如您的处理程序或线程与受限权杖相关,则可以改变存取检查的规则。这个主题的详细描述涵盖在第十一章。
此处理程序最重要的步骤是步骤四、步骤六、步骤八及步骤九。在步骤四中,假如系统发现对象的安全描述项不包括DACL,则每个人的存取检查成功。在步骤六中,假如拒绝存取的ACE与您的使用者或群组SIDs及存取检查的任一个存取权利相符合,则存取检查会立即失败,不管DACL以后的ACE是否已经通过存取检查。步骤八在所有要求的权利找到后,会通过存取检查,不管DACL以后的拒绝存取ACE是否已经使存取检查失败。最后,在步骤九中,若ACEs的数量不足以通过检查,则表示绝对失败。
如您所见的,在存取检查中,DACL中的ACEs顺序是非常重要的。您应该将DACL中拒绝存取的ACEs放置在允许存取的ACEs之前。Windows 2000的使用者介面实作了ACE的安排功能;然而,在您自己的软件中,可以使用任何的顺序放置ACEs。若在对象DACL中,您把拒绝存取的ACE放置在允许存取的ACE之后,则表示您有如此做的充分理由才会如此做!
