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

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

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

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


说明

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分割区,则可以使用登录。

登录的存取控制
 

这些步骤叙述如何将安全性选项指定到登录中的方法:

  1. 以管理员或管理员群组的成员身分登录您的系统。
  2. 执行RegEdt32.exe公用程序,您将看到类似图10-4的画面。
     

     图10-4 登录编辑器(RegEdt32.exe)
  3. 选择标题为本机上的HKEY_LOCAL_MACHINE视窗,此视窗会显示您系统上储存的HKEY_LOCAL_MACHINE内容。
  4. 开启Software机码并从编辑功能表中选择新增机码选项,新增一个称为ANewKey的新机码(新机码将命名为ANewKey,以使它显示在接近Software下的机码清单顶端)。
  5. 点选新的机码,并从安全性功能表中选择使用权限选项,此时会出现一个权限对话方块。
  6. 取消核取允许来自父项的可继承权限传播至此对象的核取方块,如此会使您的新机码安全描述项被保护,不允许从父机码传播可继承权限。系统会询问您是否希望复制或移除目前继承的权限,如图10-5所示。
     

     图10-5 为ANewKey设定继承的权限
  7. 点选移除按钮以移除存取清单。
  8. 现在新机码的DACL内容是空的。假如您点选对话方块中的确定钮,则除了您之外(因为您是此机码的拥有者),没有人可以对这个机码作任何事。而您唯一可作的事,将是读取或写入对象安全性。
  9. 点选新增钮以显示选择使用者、电脑或群组对话方块内容。从清单中选择Everyone,点选新增钮,然后按下确定按键。这表示为Everyone新增一个ACE到您机码的DACL中。
  10. 点选允许之下的完全控制核取方块,并点选确定按钮,登录编辑器会为您的机码建立一个新的安全描述项,以让Everyone完全控制这个机码。
  11. 选择ANewKey然后从编辑功能表中选择新增机码选项,对ANewKey新增两个子机码。(我将我的新机码取名为First及Second,但您可以用任何您喜欢的名字命名。)
  12. 登出您的机器,以内建的Guest帐户登入(您可能必须赋予这个帐户使用能力),然后重新执行RegEdt32.exe。除了您自己这部分外,可以使用任何信任成员帐户(另一个登出的选择是使用RunAs公用程序,以Guest帐户的身分启动RegEdt32.exe。例如:RunAs.exe /env /user:mymachine\Guest RegEdt32.exe)。
  13. 在HKEY_LOCAL_MACHINE\Software下找出您的新机码并且开启它,您应该会看到新的子机码。点选它然后从安全性功能表中选择使用权限选项,检查这两个子机码的权限,注意到这两个机码都已经从父机码继承了简单的Everyone\ 完全控制的安全性,此时不要核取允许继承权限核取方块。
  14. 由于是内建的Everyone群组成员的缘故,否则不会赋予Guest帐户可对这些机码作任何它想作的事,包括改变它们的权限。所以利用这个权力并且开启其中一个子机码的权限。
  15. 核取拒绝下方的完全控制核取方块,以拒绝对Everyone群组的完全控制。还不须点选确定钮。
  16. 您正在做的事是为子机码新增拒绝存取的ACE到DACL中。然而,请注意,允许下方的核取方块仍旧是被核取的。这是因为继承允许对Everyone完全控制的允许控制ACE仍出现在当前的DACL中。然而,您明确要求的ACE将优先于任何继承的ACEs。现在点选确定钮,然后在询问您是否想要继续的安全性对话方块中点选是。
  17. 现在您已经实际地拒绝每个人(包括您登录的这个帐户)对这个机码的任何存取权限。没有人可以在这个机码下建立子机码或值。只有拥有者(应该是您经常登录的帐户)可以修改允许权限的安全性。
  18. 在您登出并且以您标准的帐户重新登录之前,试着编辑刚修改的登录机码权限。系统应该会告诉您没有足够的存取权利去检视或编辑这个机码的安全性(然后系统将显示一个空的安全描述项,以防止您有存取这个机码的写入权利,而您确实没有这个权力)。

 

评分:0

我来说两句

seccode