50H属性结构50H类型属性即$SECURITY_DESCRIPTOR属性,也就是安全描述符,主要用于保护文件以防止没有授权的访问,但Windows 2000/XP中已将安全描述符存放在$Secure元数据中,以便于共享(早期的NTFS将其与文件目录一起存放,不便于共享)。 安全描述属性的结构见表4-44。 表4-44 50H属性描述表 在一个标准属性头后是一个50H特有的属性头,其后跟一个或两个ACL(Access Control List,访问控制列表)和两个SID(Security Identifier,安全ID)。 ACL即访问控制列表,它赋予或拒绝特定用户或组访问某个对象的权限的对象安全描述符的组成部分。只有某个对象的所有者才可以更改ACL中赋予或拒绝的权限,这样,此对象的所有者就可以自由访问该对象。 SID即安全标识符,它是用来识别用户、组和计算机账户的不同长度的数据结构。在第一次创建该账户时,将给网络上的每一个账户发布一个唯一的SID。Windows中的内部进程将引用账户的SID而不是账户的用户名或组名。 第一个ACL(Access Control Entry)包括审核信息,即访问对象时要审核的组和用户账户,但也可能没有;第二个ACL包括权限,即授予的每个组或用户的权限的每个访问事件的成功或失败属性。 每一个ACL可能包括一个或多个ACE,ACE即访问控制项,它是授予用户或组权限的ACL中的一个项目。ACE也是对象的系统访问控制列表(SACL)中的项目,该列表指定用户或组要审核的安全事件,每一个ACE包括一个SID。 SACL是表示部分对象的安全描述符的列表,该安全描述符指定了每个用户或组的哪个事件将被审核。审核事件的例子是文件访问、登录尝试和系统关闭。 最后两个SID表示对象的所有者即用户和组。 为能防止对文件的未经授权的访问,安全描述必须存储文件所有者、文件所有者授予其他用户的访问许可、什么行为需要日志记录(审核)等信息。该属性没有最小最大长度要求。 50H属性中属性头的结构50H类型属性中属性头的结构见表4-45。 表4-45 50H属性头描述表
50H属性中ACL的结构ACL的结构见表4-46。 表4-46 ACL描述表
50H属性中ACE的结构ACE的结构见表4-47。其中的标志包括3种情况,见表4-48。 表4-47 ACE描述表
表4-48 ACE的标志
该标志可能的取值依赖于类型的值(偏移00H)。对于目录,其访问允许和访问拒绝有表4-49所列标志。 表4-49 目录的ACE标志描述
如果是系统审核,标志则可能是表4-50中的情况。 表4-50 系统审核的ACL标志描述
32位访问掩码即访问权限用于列举所有的允许及不允许的行为,其含义见表4-51。 表4-51 ACL访问掩码
50H属性中SID的结构典型的SID形如:S-1-5-21-646518322-1873620750-619646970-1110,由'S-p-q-r-s-t-u-v'组成,其意义见表4-52。 表4-52 SID的结构
SID在磁盘上的存储形式如:S-1-5-21-646518322-1873620750-619646970-1110,用十六进制表示就是S-1-5-15-26891632-6fad2f0e-24ef0ffa-456(5个子域),其在磁盘上的存储见表4-53。 表4-53 SID在磁盘上的存储 但要注意的是这是一个可变长度的结构,它可能长一些,或短一些,子域会使结构变得大一些或小一些。 例如,在S-1-5-21-646518322-1873620750-619646970-1110这个SID中,“S”是SID简称,“1”为版本号,“5”为标识授权,“21”为子授权,“646518322”为SA(Security Association,安全协会),“1873620750”为SA的域ID,“619646970”也是SA,“1110”为用户ID。其中标识授权的含义见表4-54。 表4-54 安全标识的组成部分
子授权中的R表示相关ID(Relative Identifiers),用以和标识授权一起组成知名SID,其含义见表4-55。 表4-55 相关ID 常见的知名域用户见表4-56。 表4-56 常见知名域用户
常见的知名域组见表4-57。常见的知名域别名见表4-58。 表4-57 常见知名域组
表4-58 常见知名域别名
安全描述符的控制标志见表4-59。 表4-59 SID的控制标志
其中默认所有者是一个布尔标志,设置时表示通过默认机制由所有者域来指示SID,而不是采用由最初的安全描述符所显式指定的SID。它将对所有者继承的处理方式产生影响。默认组的设置同默认所有者一样。 DACL存在是一个布尔标志,设置时表示安全描述包含一个自由的ACL。如果设置了该位,而安全描述的DACL域为空,则将此空ACL列入清单。 DACL(任意访问控制列表)默认值是一个布尔标志,设置时表示通过默认机制由DACL域来指示ACL,而不是由最初的安全描述指定ACL。它将对ACL继承的处理方式产生影响。如果DACL存在没有设置,则忽略该标志。 SACL存在是一个布尔标志,设置时表示安全描述包含一个由SACL域指定的系统ACL。如果设置了该位,而安全描述的SACL域为空,则将此空ACL(但确实存在)列入清单。 SACL默认值是一个布尔标志,设置时表示通过默认机制由SACL域来指示ACL,而不是由最初的安全描述指定ACL。它将对ACL继承的处理方式产生影响。如果SACL存在没有设置,则忽略该标志。 自相关标志是一个布尔标志,设置时表示安全描述是一个自相关表。在该表中,安全描述的所有域在内存中都是连续的,所有的指示域都明确的用从相对安全描述的起始处的偏移来表示。 在NTFS 4.0以上版本中,所有的安全描述都集中存储在$Secure文件中,通过标准信息属性中的安全ID属性来找到正确的安全描述。每个唯一的安全描述都指派一个唯一的安全标识(security_id,但不是SID),卷中的security_id是唯一的,作为$SII索引的一个索引来使用,并存储为$SDS的数据流属性。$SII索引按security_id的升序进行存储。 50H属性可以常驻,也可以非常驻,一个常驻50H的例子如图4-420所示。 ![]() 图4-420 常驻50H的例子 |
|
来自: 新用户3130BjCs > 《ntfs文件格式详解》