贝贝花花包包店,精品555皮具,钱夹,皮夹

字体: | 推荐给好友 上一篇 | 下一篇

Windows2000 服务器端应用程序开发设计指南-存取控制(1)

发布: 2008-5-01 20:59 | 作者: Jeffrey Richter Jaso | 来源: 网络转载 | 查看: 336次


说明

建立一个不允许从父系继承ACEs的对象安全描述项是可能的,这样的描述项称为 保护的安全描述项 ,它阻止对象和子对象的继承,不过却不影响父对象或任何其他父系子成员的安全描述项。

系统记录了哪个ACEs被继承及明确地指定给对象的内容。如此一来,如果安全描述项在对象被建立后即被设定为保护的安全描述项,那些系统会知道要从DACL及SACL中移除哪个ACEs。并且会明确指定对象的ACEs优先于被继承的ACEs。


存取检查
 

您现在应该对如何维持一个安全对象的防护有了概念。我们将很快地开始讨论安全API的部份,但是您必须先了解存取检查的内容。

当您登录执行Windows 2000的系统时,会输入您的使用者名称。系统会寻找您所属的成员使用者帐户及群组信任成员帐户,并储存每个信任成员帐户的SID到一个称为 权杖(Token) 的内部结构中。系统也储存指派给您的信任成员及群组信任成员帐户权限清单。您将在第十一章中学到更多关于权杖的内容,但您现在应该将权杖视为一个储存身分及权限的结构。

系统为您建立权杖及启动Shell处理后,会将您的权杖与Shell联系在一起。从此之后,Shell执行的任何处理程序皆会自动启动继承您的权杖副本。这就是系统维护身分识别的观念。

与您权杖相关的处理程序在您的使用者环境或安全性环境中执行。当安全性环境执行的程序试图在安全对象上执行安全动作时,系统首先会执行存取检查,以确定您或其中一个群组是否有足够的权利去执行这个任务。图10-3显示了包含在存取检查中的实体关系。


 

 图10-3 存取安全对象的程序

说明

程序中的线程也有可能在使用者环境中执行,这与程序不同,称作 模拟 ,详细说明涵盖在下一章。


以下为系统执行存取检查时采取的步骤:

  1. 系统对应要求标准通用权利及特殊权利。
  2. 系统为这个存取检查中有关的权限检查您的权杖。大部分的存取检查不考虑权限。然而,如果您持有SeTakeOwnershipPrivilege权限,系统会永远通过WRITE_OWNER标准权利的存取检查(请参阅 表10-13 )。同样地,如果请求ACCESS_SYSTEM_SECURITY的话,您必须持有SeAuditPrivilege权限(有关权限的讨论请参阅 第九章 )。
  3. 系统将您权杖中的SID及群组SIDs与对象拥有者的SID作比较。假如您是对象的拥有者,而且要求了READ_CONTROL或WRITE_DAC的标准存取权利,则系统不会管DACL的内容即准予存取。
  4. 系统检查安全描述项中的DACL实体。假如不是当前的,则准予存取。
  5. 系统对照您权杖中的SIDs,并检查DACL之第一个ACE的SID。假如找到符合的内容,则对照存取检查所要求的存取权利而检查ACE的存取遮罩。
  6. 假如ACE是拒绝存取的ACE,且存取遮罩与任一个要求的存取权利相符,则存取检查会立即失败。
  7. 假如ACE是允许存取的ACE,并且满足任何或所有存取检查要求的存取权利,系统会把执行成功事件记录下来。
  8. 存取检查要求的所有权利都符合后,系统就通过存取检查。
  9. 假如DACL中最后一个ACE被检查,而且没有找到检查要求的所有权利,则系统的存取检查失败。

说明

您可以建立一个受额外存取权利限制的权杖,并任意地选择信任成员帐户。称为 受限权杖 。假如您的处理程序或线程与受限权杖相关,则可以改变存取检查的规则。这个主题的详细描述涵盖在第十一章。


此处理程序最重要的步骤是步骤四、步骤六、步骤八及步骤九。在步骤四中,假如系统发现对象的安全描述项不包括DACL,则每个人的存取检查成功。在步骤六中,假如拒绝存取的ACE与您的使用者或群组SIDs及存取检查的任一个存取权利相符合,则存取检查会立即失败,不管DACL以后的ACE是否已经通过存取检查。步骤八在所有要求的权利找到后,会通过存取检查,不管DACL以后的拒绝存取ACE是否已经使存取检查失败。最后,在步骤九中,若ACEs的数量不足以通过检查,则表示绝对失败。

如您所见的,在存取检查中,DACL中的ACEs顺序是非常重要的。您应该将DACL中拒绝存取的ACEs放置在允许存取的ACEs之前。Windows 2000的使用者介面实作了ACE的安排功能;然而,在您自己的软件中,可以使用任何的顺序放置ACEs。若在对象DACL中,您把拒绝存取的ACE放置在允许存取的ACE之后,则表示您有如此做的充分理由才会如此做!

 

评分:0

我来说两句

seccode