10.1.2 存取控制.htm

来自「Windows2000后台服务程序开发手册」· HTM 代码 · 共 730 行 · 第 1/4 页

HTM
730
字号
              <LI style="LINE-HEIGHT: 25px">ACE可以被定义为只被同为容器的子对象继承,或者被任何子对象继承。<BR 
              style="LINE-HEIGHT: 25px">  </LI></UL></FONT>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>这些决策方式的每一个都可以组成ACE,不管ACE的其他继承属性。所以如您所见,ACE可以用几种不同的方法继承。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>建立一个不允许从父系继承ACEs的对象安全描述项是可能的,这样的描述项称为<FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;保护的安全描述项&nbsp;</B></FONT>,它阻止对象和子对象的继承,不过却不影响父对象或任何其他父系子成员的安全描述项。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>系统记录了哪个ACEs被继承及明确地指定给对象的内容。如此一来,如果安全描述项在对象被建立后即被设定为保护的安全描述项,那些系统会知道要从DACL及SACL中移除哪个ACEs。并且会明确指定对象的ACEs优先于被继承的ACEs。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e74d7 
            size=3><B style="LINE-HEIGHT: 25px">存取检查<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您现在应该对如何维持一个安全对象的防护有了概念。我们将很快地开始讨论安全API的部份,但是您必须先了解存取检查的内容。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>当您登录执行Windows 
            2000的系统时,会输入您的使用者名称。系统会寻找您所属的成员使用者帐户及群组信任成员帐户,并储存每个信任成员帐户的SID到一个称为<FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;权杖(Token)&nbsp;</B></FONT>的内部结构中。系统也储存指派给您的信任成员及群组信任成员帐户权限清单。您将在第十一章中学到更多关于权杖的内容,但您现在应该将权杖视为一个储存身分及权限的结构。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>系统为您建立权杖及启动Shell处理后,会将您的权杖与Shell联系在一起。从此之后,Shell执行的任何处理程序皆会自动启动继承您的权杖副本。这就是系统维护身分识别的观念。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>与您权杖相关的处理程序在您的使用者环境或安全性环境中执行。当安全性环境执行的程序试图在安全对象上执行安全动作时,系统首先会执行存取检查,以确定您或其中一个群组是否有足够的权利去执行这个任务。图10-3显示了包含在存取检查中的实体关系。</FONT></P>
            <P><BR style="LINE-HEIGHT: 25px"> </P>
            <CENTER style="LINE-HEIGHT: 25px">
            <P><INPUT id=3 style="LINE-HEIGHT: 25px" type=image height=438 
            width=498 src="10.1.2 存取控制.files/10-3.gif" border=0 
            &#111nclick="imgclick"></P></CENTER>
            <CENTER style="LINE-HEIGHT: 25px">
            <TABLE style="LINE-HEIGHT: 25px" border=0>
              <TBODY style="LINE-HEIGHT: 25px">
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px" align=middle><FONT 
                  style="LINE-HEIGHT: 25px" face=arial color=#000000 
                  size=2><FONT style="LINE-HEIGHT: 25px" face=arial 
                  color=#3e80d7 size=2><B 
                  style="LINE-HEIGHT: 25px">&nbsp;图10-3&nbsp;</B></FONT>存取安全对象的程序</FONT></TD></TR></TBODY></TABLE></CENTER>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>程序中的线程也有可能在使用者环境中执行,这与程序不同,称作<FONT style="LINE-HEIGHT: 25px" 
            face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;模拟&nbsp;</B></FONT>,详细说明涵盖在下一章。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>以下为系统执行存取检查时采取的步骤:</FONT></P><FONT style="LINE-HEIGHT: 25px" 
            face=arial color=#000000 size=2>
            <OL style="LINE-HEIGHT: 25px">
              <LI style="LINE-HEIGHT: 25px">系统对应要求标准通用权利及特殊权利。 
              <LI 
              style="LINE-HEIGHT: 25px">系统为这个存取检查中有关的权限检查您的权杖。大部分的存取检查不考虑权限。然而,如果您持有SeTakeOwnershipPrivilege权限,系统会永远通过WRITE_OWNER标准权利的存取检查(请参阅&nbsp;</FONT></A><FONT 
              style="LINE-HEIGHT: 25px" face=arial color=#000000 size=2><A 
              style="LINE-HEIGHT: 25px" 
              href="http://www.acejoy.com/doc/serverside/10.htm#460_1" 
              target=_new>表10-13</A>&nbsp;)。同样地,如果请求ACCESS_SYSTEM_SECURITY的话,您必须持有SeAuditPrivilege权限(有关权限的讨论请参阅&nbsp;<A 
              style="LINE-HEIGHT: 25px" 
              href="http://e-msbooks.com/relaunch/XML/paser.asp?src=957-2085-84-0_209.xml#" 
              target=_new>第九章</A>&nbsp;)。 
              <LI 
              style="LINE-HEIGHT: 25px">系统将您权杖中的SID及群组SIDs与对象拥有者的SID作比较。假如您是对象的拥有者,而且要求了READ_CONTROL或WRITE_DAC的标准存取权利,则系统不会管DACL的内容即准予存取。 

              <LI style="LINE-HEIGHT: 25px">系统检查安全描述项中的DACL实体。假如不是当前的,则准予存取。 
              <LI 
              style="LINE-HEIGHT: 25px">系统对照您权杖中的SIDs,并检查DACL之第一个ACE的SID。假如找到符合的内容,则对照存取检查所要求的存取权利而检查ACE的存取遮罩。 

              <LI 
              style="LINE-HEIGHT: 25px">假如ACE是拒绝存取的ACE,且存取遮罩与任一个要求的存取权利相符,则存取检查会立即失败。 

              <LI 
              style="LINE-HEIGHT: 25px">假如ACE是允许存取的ACE,并且满足任何或所有存取检查要求的存取权利,系统会把执行成功事件记录下来。 

              <LI style="LINE-HEIGHT: 25px">存取检查要求的所有权利都符合后,系统就通过存取检查。 
              <LI 
              style="LINE-HEIGHT: 25px">假如DACL中最后一个ACE被检查,而且没有找到检查要求的所有权利,则系统的存取检查失败。 
              </LI></OL></FONT>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您可以建立一个受额外存取权利限制的权杖,并任意地选择信任成员帐户。称为<FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;受限权杖&nbsp;</B></FONT>。假如您的处理程序或线程与受限权杖相关,则可以改变存取检查的规则。这个主题的详细描述涵盖在第十一章。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>此处理程序最重要的步骤是步骤四、步骤六、步骤八及步骤九。在步骤四中,假如系统发现对象的安全描述项不包括DACL,则每个人的存取检查成功。在步骤六中,假如拒绝存取的ACE与您的使用者或群组SIDs及存取检查的任一个存取权利相符合,则存取检查会立即失败,不管DACL以后的ACE是否已经通过存取检查。步骤八在所有要求的权利找到后,会通过存取检查,不管DACL以后的拒绝存取ACE是否已经使存取检查失败。最后,在步骤九中,若ACEs的数量不足以通过检查,则表示绝对失败。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>如您所见的,在存取检查中,DACL中的ACEs顺序是非常重要的。您应该将DACL中拒绝存取的ACEs放置在允许存取的ACEs之前。Windows 
            2000的使用者介面实作了ACE的安排功能;然而,在您自己的软件中,可以使用任何的顺序放置ACEs。若在对象DACL中,您把拒绝存取的ACE放置在允许存取的ACE之后,则表示您有如此做的充分理由才会如此做!</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>DACL末端的拒绝存取ACE是浪费的。假如ACE拒绝已经允许的存取动作,则存取检查连末端的拒绝ACE也不会看。而如果ACE拒绝没有明确的允许存取,那么一开始就拒绝存取是没有必要的-除非它被明确地允许,否则即表示它暗示地拒绝该存取动作。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>Microsoft已经发表DACL中的ACEs惯用顺序,称为「惯用的」顺序,因为它不完全是强制执行的。表10-6显示了DACL中ACEs惯用的顺序。</FONT></P><A 
            style="LINE-HEIGHT: 25px" name=533_1>
            <CENTER style="LINE-HEIGHT: 25px">
            <TABLE style="LINE-HEIGHT: 25px" border=0>
              <TBODY style="LINE-HEIGHT: 25px">
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px" align=middle><FONT 
                  style="LINE-HEIGHT: 25px" face=arial color=#000000 
                  size=2><FONT style="LINE-HEIGHT: 25px" face=arial 
                  color=#3e80d7 size=2><B 
                  style="LINE-HEIGHT: 25px">&nbsp;表10-6&nbsp;</B></FONT>DACL中ACEs惯用的顺序</FONT></TD></TR></TBODY></TABLE></CENTER>
            <CENTER style="LINE-HEIGHT: 25px">
            <TABLE style="LINE-HEIGHT: 25px" border=1>
              <TBODY style="LINE-HEIGHT: 25px">
              <TR style="LINE-HEIGHT: 25px">
                <TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>ACE类型</FONT> </TH>
                <TH style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>群组</FONT></TH></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>拒绝存取的ACEs<BR style="LINE-HEIGHT: 25px"><FONT 
                  style="LINE-HEIGHT: 25px" face=arial color=#000000 
                  size=2>拒绝存取对象的ACEs,适用于子对象或对象的属性</FONT><BR 
                  style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  face=arial color=#000000 size=2>允许存取的ACEs</FONT><BR 
                  style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  face=arial color=#000000 
                  size=2>允许存取对象的ACEs,适用于子对象或对象的属性</FONT></FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>明确地指派(非继承)ACEs</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>拒绝存取的ACEs<BR style="LINE-HEIGHT: 25px"><FONT 
                  style="LINE-HEIGHT: 25px" face=arial color=#000000 
                  size=2>拒绝存取对象的ACEs,适用于子对象或对象的属性</FONT><BR 
                  style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  face=arial color=#000000 size=2>允许存取的ACEs</FONT><BR 
                  style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  face=arial color=#000000 
                  size=2>允许存取对象的ACEs,适用于子对象或对象的属性</FONT></FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>继承ACEs</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>表10-6中的顺序规则看起来可能有点复杂,但请记得,系统中除了目录服务对象(Active 
            Directory中的对象)外,并非所有的安全对象都使用对象ACEs。忽视对象ACEs将会大大地简化ACEs的顺序。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><B style="LINE-HEIGHT: 25px">认识自订或私人对象安全性<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>我们已经讨论过系统安全对象、保护对象安全的安全描述项结构,以及系统如何使用DACL检查安全性,以防备软件的请求。然而,我还未说明如何让软件使用Windows安全模组建立安全对象。Windows提出此功能为<FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;安全私人对象&nbsp;</B></FONT>。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>私人对象安全性是包含在Windows中的一个非常强大且具有弹性的特色。在本章的后续部分,将会讨论与私人对象一起使用的安全性API。此时,要先说明如何将私人对象安全性与Windows现有的安全模组结合。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>除了您的软件外,您已学习之有关安全描述项、ACLs、DACLs及ACEs的每件事皆适用于私人对象上,并非系统,您必须决定哪个标准权利(列于表10-13)适用于您的对象。此外,您必须为您的对象定义特殊的权利,并将四个通用权利对应到适当标准及特殊权利的结合上。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您的软件经由呼叫系统函数来执行存取检查。通常,您的软件是个服务,它传递相关的客户端权杖到安全描述项的系统中。然后系统会指出是否拥有客户端要求的存取权利。根据存取检查的结果,您的服务应对执行或拒绝执行要求的动作负责。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>系统为您的私人对象建立及删除内存中的安全描述项。您必须将安全描述项与他们保护的资料联系在一起。当服务结束时,它也应负责储存安全性与资料到永续性储存体(Persistent 
            Storage)上(假设对象为持续的情形)。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=Arial color=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>私人对象安全性不会自动地保护软件定义的对象资料安全性-假如您的对象储存在文件中,您还必须保护文件的安全。然而,私人对象安全性提供可让您以更细微的层级控制资料的机制,而不须受限于文件安全或Windows中其他储存机制的安全性。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><B style="LINE-HEIGHT: 25px">浏览Windows的安全性<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?