10.1.1 存取控制.htm

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

HTM
676
字号
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>通用权利</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>通用权利指某个对象的标准及特殊权利的集合。系统定义了四个通用的权利:读取、写入、执行及所有。每个通用权利的意义与对象对对象的情形不同。</FONT></TD></TR></TBODY></TABLE></CENTER>
            <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>当使用者企图在对象上执行安全性工作时,系统会执行<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=#3e77d7 size=3 
            Black><B style="LINE-HEIGHT: 25px">说明</B></FONT> </P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>系统也提供回报尝试存取安全对象结果(成功及不成功)的能力。称为稽核。稽核事件被记录到事件日志中。任何被允许或拒绝给予对象存取权利的事件也会被稽核。尽管稽核与存取控制的情形相似,但它是单独且不常使用的特色。大部份您所学到关于存取控制的部份皆会应用到稽核,所以最好现在就了解其功能。(本章稍后的〈稽核及SACL〉一节中将讨论稽核的内容)。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#3e72d7 
            size=4><B style="LINE-HEIGHT: 25px">安全描述项(Security Descriptor)<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>如前所述,系统中每个安全对象类型的安全使用任何与其他安全对象相同的方式大量被储存及运用。这是因为在Windows 
            2000中的所有存取控制皆使用一个称为<FONT style="LINE-HEIGHT: 25px" face=arial 
            color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;安全描述项&nbsp;</B></FONT>的资料结构实作。<FONT 
            style="LINE-HEIGHT: 25px" face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;安全描述项&nbsp;</B></FONT>维护了一个对象的重要安全资讯,例如它的拥有者,以及和系统使用者相关的权利清单。每个在Windows中的安全对象都有一个安全描述项。图10-1显示安全描述项的样子,表10-3则叙述了元件的内容。您将会发现您常使用到与拥有者及安全描述项之判别存取控制清单(Discretionary 
            Access Control List,DACL)元件相关的部份。</FONT></P>
            <P><BR style="LINE-HEIGHT: 25px"> </P>
            <CENTER style="LINE-HEIGHT: 25px">
            <P><INPUT id=1 style="LINE-HEIGHT: 25px" type=image height=569 
            width=259 src="10.1.1 存取控制.files/10-1.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-1&nbsp;</B></FONT>安全描述项</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>之前曾经讨论过,从一个Windows中的对象安全类型到另一个类型的操作,有很多相同的程序。典型的情形下,安全描述项经由您的软件产生,然后传递到建立对象的系统函数中,并分派安全给对象。</FONT></P>
            <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>
            <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>元件</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>Revision</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出安全描述项结构之修订等级值。</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>Control</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>指出安全描述项之内容意义的一组标记。</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>Owner</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>对象拥有者的安全识别码(SID)。对象拥有者有特殊的权利-即拥有者可以一直读取及修改对象的安全性,不管是否有明确指派DACL中叙述的权利。所有安全对象都有一位拥有者(关于SIDs的讨论,请参阅&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;)。</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>Group</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>主要群组对象的SID。Windows 
                  2000在存取控制上没有利用到主要的群组。因为拥有维护资讯,使得Microsoft Windows 
                  NT可被用来当作操作系统的文件服务器平台。</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>DACL</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>判别存取控制清单(Discretionary Access Control 
                  List,DACL)是叙述对象所有存取权利的存取控制清单。这个清单定义了谁可以或不可以在对象上执行安全动作。假如没有目前的DACL,则每个人都拥有对该对象的所有存取权利。假如当前的DACL是空的,则除了拥有者外,没有人拥有对该对象的存取权利。</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>SACL</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>系统存取控制清单(Sysem Access Control 
                  List,SACL)是与以稽核为目的使用者相关的存取权利清单。SACL不会影响对对象的存取情形,但它会将对对象的存取记录到事件日志中。有关此部份的更多资讯,请参阅本章稍后的〈&nbsp;<A 
                  style="LINE-HEIGHT: 25px" 
                  href="http://www.acejoy.com/doc/serverside/10.htm#455_1" 
                  target=_new>稽核及SACL</A>&nbsp;〉一节。</FONT></TD></TR></TBODY></TABLE></CENTER>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>您也可以撷取现有安全描述项对象的副本,使用系统函数读取或修改安全描述项,然后再使用系统函数设定安全描述项的原始对象。</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=#3e74d7 
            size=3><B style="LINE-HEIGHT: 25px">ACLs、ACEs及DACL<BR 
            style="LINE-HEIGHT: 25px"> </B></FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>ACL是多个连续的可变长度结构清单,称为<FONT style="LINE-HEIGHT: 25px" 
            face=arial color=#3e80d7 size=2><B 
            style="LINE-HEIGHT: 25px">&nbsp;存取控制项目(Access Control 
            Entries)&nbsp;</B></FONT>,或ACEs。每个ACE皆指出与对象相关之存取权利及信任成员的SID。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>DACL及SACL皆是ACLs。DACL被用在对象的存取控制上,它的ACEs内容指出谁被允许或不被允许存取对象。SACL则用在存取稽核的部份。DACL及SACL的结构相同,而且操作它们的程序代码也以同样的方式实作。我将在本章稍后的〈稽核及SACL〉一节中讨论SACL,此处的许多讨论则着重在应用SACL的DACL部份。</FONT></P>
            <P><FONT style="LINE-HEIGHT: 25px" face=arial color=#000000 
            size=2>当应用程序企图存取安全对象时,系统浏览对象的DACL会寻找ACEs,并指出在应用程序执行之下的使用者信任成员帐户或使用者为其成员的群组信任成员帐户。假如找到符合的ACE,系统便会检查ACE授予或否决应用程序要求执行的存取权利。稍后会对存取检查的部份做更详细的讨论。首先让我们看表10-4中叙述的六种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>除了目录服务对象之外,Object-type ACEs不与任何系统中的安全对象一起使用。然而,object-type 
            ACEs可以与您自己的私人对象一起使用。此处主要集中在一般的ACE类型上,但本章中仍会对object-type 
            ACEs做简短的讨论。</FONT></P>
            <HR style="LINE-HEIGHT: 25px">

            <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-4&nbsp;</B></FONT>Windows 
                  2000中的ACE类型</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>允许存取(ACCESS_ALLOWED_ACE_TYPE)</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>定义一组允许指定信任成员帐户的存取权利</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>拒绝存取(ACCESS_DENIED_ACE_TYPE</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>定义一组拒绝给指定信任成员帐户的存 )取权利</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>系统稽核(SYSTEM_AUDIT_ACE_TYPE)</FONT></TD>
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 
                  size=2>定义一个假如经由指定的信任成员帐户执行时,将产生稽核报告的安全动作</FONT></TD></TR>
              <TR style="LINE-HEIGHT: 25px">
                <TD style="LINE-HEIGHT: 25px"><FONT style="LINE-HEIGHT: 25px" 

⌨️ 快捷键说明

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