【windows 访问控制】三、访问控制列表 ACL=DACL+SACL
访问控制列表(ACL:Access Control List)
ACL列表的结构
ACL 中的每个 ACE 标识一个受信者,并指定该受信者访问规则。安全对象的安全描述符 可以包含两种类型的 ACL:DACL 和 SACL。
DACL:自主访问控制列表(DACL)是安全描述符中最重要的,它里面包含零个或多个访问控制项(ACE,Access Control Entry),每个访问控制项的内容描述了允许或拒绝特定账户对这个对象执行特定操作。
SACL:系统访问控制列表(SACL) 主要是用于系统审计的,它的内容指定了当特定账户对这个对象执行特定操作时,记录到系统日志中。
访问控制列表(ACL)是访问控制条目(ACE)的列表。 ACL中的每个ACE都标识一个对象(通常称这个对象为受托者,受托者可以是一个用户、用户组或者是一个登陆会话),并指定允许、拒绝或审核该受托者的访问权限。可保护对象的安全描述符可以包含两种类型的ACL:DACL和SACL。
DACL标识是否允许或拒绝访问安全对象。当进程尝试访问安全对象时,系统将检查该对象的DACL中的ACE,以确定是否授予对该对象的访问权限。
-
系统依次检查ACE,直到找到一个或多个允许所有请求的访问权限的ACE,或者直到拒绝任何请求的访问权限为止。
下图显示了对象的DACL如何允许访问一个线程而拒绝访问另一个线程。
对于线程A,系统将读取第一条ACE并立即拒绝访问,因为拒绝访问的ACE适用于线程访问令牌中的用户。在这种情况下,系统将不检查之后的ACE。对于线程B,第一条ACE不适用,因此系统进入允许写入访问的ACE 2和允许读取和执行访问的ACE 3。
SACL使管理员可以记录任何人对安全对象的访问。每个ACE指定受托者尝试访问的类型,这些访问使系统在安全事件日志中生成记录。当访问尝试失败或成功时,SACL中的ACE可以生成审核记录。
不要尝试直接使用ACL的内容。为确保ACL在语义上正确,需使用适当的函数来创建和操作ACL。
ACL还提供对
Microsoft Active Directory
目录服务对象的访问控制。 Active Directory
服务接口(ADSI)包括用于创建和修改这些ACL内容的例程。相关内容会另开文章详细介绍。-
如果对象没有DACL,则系统将授予所有人完全访问权限。
-
如果对象的DACL没有ACE,则系统将拒绝所有尝试访问该对象的尝试,因为DACL不允许任何访问权限。
自由访问控制列表(DACL:Discretionary Access Control List)
就像它的名字一样,DACL就是一个表明其它所有人的自由的(相应的)访问控制列表。这是什么意思呢?让我们具体看看DACL里面是什么东西吧。看下图你就比较明白了。
授权参数为空 DACL (空 DACL)
如果 属于对象安全描述符 (DACL) 自由访问控制列表设置为 NULL, 则创建 null DACL。 NULL DACL 向请求它的用户授予完全访问权限;不会对 对象执行正常的安全检查。 null DACL 不应与空的 DACL 混淆。 空 DACL 是正确分配和初始化的 DACL,它不包含AES (访问控制) 。 空 DACL 不授予对它所分配到的对象的访问权限。
系统访问控制列表(SACL:System Access Control List)
SACL其实就是一个审计中心,这个列表里面列举着哪些类型的访问请求需要被系统记录。一旦有用户访问一个安全对象,其请求的访问权限和SACL中的一个ACE符合,那么系统会记录这个用户的请求是被拒绝了还是被允许了。MSDN提及说,将来可能会实现安全对象会对未经授权的用户访问发出警告信息。个人理解:SACL的作用是记录访问成功与否,SACL也是由ACE构成,每条ACE的内容是某个用户访问成功/失败某个权限,当访问跟满足这条ACE的时候就会被记录下来。
DACL|SACL 列表显示顺序
1、拒绝(deny)有优先排在允许(allow)前面
2、继承的ACE会排在程序或者手动的添加ACE顺序之后;
C#給文件夹添加ACE的顺序
编程是个人爱好