Windows2000 服务器端应用程序开发设计指南-存取控制(1)
存取控制
转自:http://mickorguo.blog.163.com/blog/static/6219480200741214941206/
Microsoft Windows 2000提供了广泛且具高度弹性的安全功能,在现今市场上没有其他的作业系统能在安全对象上提供细微的控制。而Windows实作了 存取控制 部份,所以可以达到如此重要的程度。表10-13 的内容。特殊权利特殊权利只应用在特殊类型的安全对象上。举例来说,某个文件对象的特殊权利可能会是新增资料或从文件中读取资料的权利。通用权利通用权利指某个对象的标准及特殊权利的集合。系统定义了四个通用的权利:读取、写入、执行及所有。每个通用权利的意义与对象对对象的情形不同。
我会详细讨论每种权利的类型。而此时先把权利看成允许或不允许使用者对对象作某些事是重要的。例如,一个文件可让使用者读取,但不让使用者删除:这是有可能的,因为系统为读取及删除定义了不同的权利。
当使用者企图在对象上执行安全性工作时,系统会执行 存取检查 的动作。存取检查会搜寻被指派给对象的权利,并与尝试动作的使用者身分作对照。假如系统判定使用者已经要求存取对象,则动作被执行。若使用者没有适当的存取,则该动作不会被执行,代表使用者执行的软件会接收到「拒绝存取」的错误讯息。
说明
系统也提供回报尝试存取安全对象结果(成功及不成功)的能力。称为稽核。稽核事件被记录到事件日志中。任何被允许或拒绝给予对象存取权利的事件也会被稽核。尽管稽核与存取控制的情形相似,但它是单独且不常使用的特色。大部份您所学到关于存取控制的部份皆会应用到稽核,所以最好现在就了解其功能。(本章稍后的〈稽核及SACL〉一节中将讨论稽核的内容)。
安全描述项(Security Descriptor)
如前所述,系统中每个安全对象类型的安全使用任何与其他安全对象相同的方式大量被储存及运用。这是因为在Windows 2000中的所有存取控制皆使用一个称为 安全描述项 的资料结构实作。 安全描述项 维护了一个对象的重要安全资讯,例如它的拥有者,以及和系统使用者相关的权利清单。每个在Windows中的安全对象都有一个安全描述项。图10-1显示安全描述项的样子,表10-3则叙述了元件的内容。您将会发现您常使用到与拥有者及安全描述项之判别存取控制清单(Discretionary Access Control List,DACL)元件相关的部份。
| 图10-1 安全描述项 |
之前曾经讨论过,从一个Windows中的对象安全类型到另一个类型的操作,有很多相同的程序。典型的情形下,安全描述项经由您的软件产生,然后传递到建立对象的系统函数中,并分派安全给对象。
| 表10-3 安全描述项的元件 |
| 元件 | 叙述 |
|---|---|
| Revision | 指出安全描述项结构之修订等级值。 |
| Control | 指出安全描述项之内容意义的一组标记。 |
| Owner | 对象拥有者的安全识别码(SID)。对象拥有者有特殊的权利-即拥有者可以一直读取及修改对象的安全性,不管是否有明确指派DACL中叙述的权利。所有安全对象都有一位拥有者(关于SIDs的讨论,请参阅 第九章 )。 |
| Group | 主要群组对象的SID。Windows 2000在存取控制上没有利用到主要的群组。因为拥有维护资讯,使得Microsoft Windows NT可被用来当作操作系统的文件服务器平台。 |
| DACL | 判别存取控制清单(Discretionary Access Control List,DACL)是叙述对象所有存取权利的存取控制清单。这个清单定义了谁可以或不可以在对象上执行安全动作。假如没有目前的DACL,则每个人都拥有对该对象的所有存取权利。假如当前的DACL是空的,则除了拥有者外,没有人拥有对该对象的存取权利。 |
| SACL | 系统存取控制清单(Sysem Access Control List,SACL)是与以稽核为目的使用者相关的存取权利清单。SACL不会影响对对象的存取情形,但它会将对对象的存取记录到事件日志中。有关此部份的更多资讯,请参阅本章稍后的〈 稽核及SACL 〉一节。 |
您也可以撷取现有安全描述项对象的副本,使用系统函数读取或修改安全描述项,然后再使用系统函数设定安全描述项的原始对象。
说明
一旦您从对象撷取一份副本后,使用系统函数修改安全描述项的方式似乎有效率偏低的情形。您可以想想为何不用您的软件直接存取资料的方法-答案是,在您的处理程序内存中已有一份资料结构的副本。尽管您可以用这种方法存取资料,但最好不要,因为安全描述项预期会被视为一个「不透明」结构而存取,以使您的程序代码在未来的Windows版本上仍然能正确地运作。
ACLs、ACEs及DACL
ACL是多个连续的可变长度结构清单,称为 存取控制项目(Access Control Entries) ,或ACEs。每个ACE皆指出与对象相关之存取权利及信任成员的SID。
DACL及SACL皆是ACLs。DACL被用在对象的存取控制上,它的ACEs内容指出谁被允许或不被允许存取对象。SACL则用在存取稽核的部份。DACL及SACL的结构相同,而且操作它们的程序代码也以同样的方式实作。我将在本章稍后的〈稽核及SACL〉一节中讨论SACL,此处的许多讨论则着重在应用SACL的DACL部份。
当应用程序企图存取安全对象时,系统浏览对象的DACL会寻找ACEs,并指出在应用程序执行之下的使用者信任成员帐户或使用者为其成员的群组信任成员帐户。假如找到符合的ACE,系统便会检查ACE授予或否决应用程序要求执行的存取权利。稍后会对存取检查的部份做更详细的讨论。首先让我们看表10-4中叙述的六种ACE类型。其中,允许存取及拒绝存取的ACE显然是最常用的。
说明
除了目录服务对象之外,Object-type ACEs不与任何系统中的安全对象一起使用。然而,object-type ACEs可以与您自己的私人对象一起使用。此处主要集中在一般的ACE类型上,但本章中仍会对object-type ACEs做简短的讨论。
| 表10-4 Windows 2000中的ACE类型 |
| ACE类型(系统使用的值) | 叙述 |
|---|---|
| 允许存取(ACCESS_ALLOWED_ACE_TYPE) | 定义一组允许指定信任成员帐户的存取权利 |
| 拒绝存取(ACCESS_DENIED_ACE_TYPE | 定义一组拒绝给指定信任成员帐户的存 )取权利 |
| 系统稽核(SYSTEM_AUDIT_ACE_TYPE) | 定义一个假如经由指定的信任成员帐户执行时,将产生稽核报告的安全动作 |
| 允许存取的对象(ACCESS_ALLOWED_OBJECT_ACE_TYPE) | 定义一个允许对象、对象的子对象或属性之指定信任成员帐户的个别存取权利 (通常与目录服务对象一起使用) |
| 拒绝存取的对象(ACCESS_DENIED_OBJECT_ACE_TYPE) | 定义一个拒绝给予对象、对象的子对象或属性之指定信任成员帐户的个别存取权利(通常与目录服务对象一起使用) |
| 系统稽核对象(SYSTEM_AUDIT_OBJECT_ACE_TYPE) | 定义一个假如经由对象、对象的子对象或属性之指定信任成员帐户执行时,产生稽核报告的个别存取权利(通常与目录服务对象一起使用) |
允许及拒绝存取之标准ACEs相当简单。表10-5显示了标准ACE的内容。
| 表10-5 标准(非对象)ACE的内容 |
| ACE元件 | 叙述 |
|---|---|
| ACE类型 | 一个以数值表示的值,指出ACE的类型(表10-4显示了Windows 2000中的ACE类型)。 |
| ACE标记 | 指出ACEs的继承规则与SACL之ACEs的稽核规则(有关可用的继承标记清单,请参阅 表10-11 )。 |
| 存取遮罩 | 一个32位元的值,指出ACE叙述的存取权利。 |
| 信任成员的SID | 指出与ACE的存取权利相关的信任成员使用者、群组或电脑帐户。 |


浙公网安备 33010602011771号