[转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)

对于《windows核心编程》中的只言片语无法驱散心中的疑惑。就让MSDN中的解释给我们一盏明灯吧。如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下。

windows的安全访问控制(ACM,access control mode)是由两部分组成的。一个是访问令牌(access tokens),另一个是安全描述符(security identifiers)。

访问令牌是欲进行访问的进程使用的表明自己身份和特权的信息数据。

安全描述符是欲被访问的安全对象的相关安全信息。如什么样的用户的什么访问请求可以被允许,什么样的用户或者组的什么访问要被拒绝。

  • Security Identifiers(SID)

经常听到SID,那么什么是SID呢,MSDN中说,SID是用来标识信任方的唯一的数值,其长度可变。而信任方就是用户,组,会话。所以基本上可以把SID理解为是一个用户名,一个组名,会话名。只是他们是经过安全认证,且不会重复,也就是安全可靠的。如果我们提到张三这个用户的SID,那么我们就可以理解为“张三(真)“。

  • Security Descriptors(安全描述符)

MSDN说安全描述符包含了描述一个安全对象的安全信息。其实这句话说的很对,只是是大概上的。让我们具体看看安全描述符到底描述了哪些东西?

安全描述符包括:

1.与安全描述符关联的安全对象的拥有者的SID和此拥有者所在主群的SID

2.一个DACL(discretionary access control list)

3.一个SACL(system access control list)

4.和安全描述符意思相符的控制位集合

第一点不用说了,第二,三点看下面的ACL有详细解释,DACL和SACL分别是ACL的一种类型。第四点暂且不详。

  • ACL(访问控制列表,access control list)

一提到像访问控制列表这样的东西,就会比较畏惧。其实一开始自己也很畏惧。因为以前一直对那些计算机理论术语很没感情。不过理解之后还是挺不错的。

ACL包括两种类型的访问控制列表,但不管是哪种列表它们的基本格式是一样的,那就是列表,列表入口(也叫访问控制入口,ACE,access control entry)。这两种安全控制列表分别是:

1.DACL(自由访问控制列表)

就像它的名字一样,DACL就是一个表明其它所有人的自由的(相应的)访问控制列表。这是什么意思呢?让我们具体看看DACL里面是什么东西吧。看下图你就比较明白了。

相信看了这个图能明白一大半。一个DACL是一个列表,每个列表入口(ACE)都是一个对某个SID的访问控制说明,描述这个SID是被拒绝还是被允许,如果允许的话,对这个SID给予什么权限。当然这个图很形象,但实际中ACE里面不是一个一个的字符串,这个ACE是怎么样的呢?

ACE其实由四部分组成,只是上面的图画的太好了。

这四部分分别是:

1.可能访问本ACE某个用户SID(对应Andrew)

2.该用户的访问权限的掩码(Read,write,execute)

3.ACE的类型,总共有三种。Access-denied ACE,Access-allowed ACE,System-audit ACE。前两种是DACL类型,最后一种是SACL类型。

4.这个ACE是否可以被其他安全对象继承。

那么DACL是如何工作的?

就想上图显示的一样,线程访问安全对象,要出示自己的令牌(说的很人性化似地,其实是有操作系统查看线程access tokens数据结构),将access tokens的用户SID,所属组群SID以及相应的权限与DACL里面的每个ACE相应的数据项进行比较,直到比较到一个ACE明确允许这个线程的所需操作,或者明确拒绝这个线程的访问要求,再或者没有找到上面任何一种情况比较结束了,那么就默认的拒绝。这个链表的比较是顺序的,从头到尾。如果链表的顺序变了,或许原来访问请求的结果就样了。

例如将上图中ACE3和ACE1的顺序调换过来,Thread A的请求就会被允许。所以顺序很重要。所以如果要构建一个安全描述符的DACL的话,用API添加ACE的时候,程序员要谨慎处理。注意API函数添加ACE始终实在链表末尾添加的。

ACE继承没有完全研究,暂且搁浅!

2.SACL(系统访问控制列表)

SACL是什么呢?其实就是一个审计中心,这个列表里面列举着那些类型的访问请求需要被系统记录。一旦有用户访问一个安全对象,其请求的访问权限和SACL中的一个ACE符合,那么系统会记录这个用户的请求是被拒绝了还是被允许了。MSDN提及说,将来可能会实现安全对象会对未经授权的用户访问发出警告信息。

  • Access Tokens(访问令牌)

我们可以这样理解访问令牌,不过还是先把完整概念介绍一下。

访问令牌是包含12项,分别是:

  1. 当前用户的安全ID(稍后介绍),
  2. 当前用户所属组的安全ID。
  3. 当权会话安全ID。
  4. 用户所有的特权列表(包括用户本身,和其所属组)。
  5. 令牌拥有者安全ID。
  6. 用户所属主组群安全ID。
  7. 默认的自由访问控制列表(稍后介绍)。
  8. 源访问令牌
  9. 表明此令牌是源令牌还是模拟令牌
  10. 可选的链表,表明此令牌限制哪些SID
  11. 当前模拟令牌的级别
  12. 其他数据资料

看到这么多数据项,你该知道安全措施需要付出多大的代价了吧。

访问令牌描述了一个进程或线程的相关的安全信息。这些信息表明与这个进程或者线程关联的用户的标识符和特权。当用户登陆系统是,将用户密码和系统内数据库内的响应密码对比,如果验证通过,系统给用户产生一个访问令牌。以后这用户打开的所有线程都是继承与这个令牌。拿着这个令牌去访问安全对象。(Windows vista之后已经不一样了,如果是管理员登陆的话,管理员得到的访问令牌,和管理员启动的进行所拥有的令牌不一样,进程的令牌是被筛选的,或者说是降低权限的,进程要获得管理员的访问令牌(或者会所权限),就必须发出申请,系统显示一个对话框,是否允许这个程序以这种方式启动。)

每个进程至少有一个访问令牌,那就是主访问令牌,为什么是主呢?因为有些进程可能模拟另一个用户,并会或者另一个用户的令牌,而那个令牌就是模拟令牌。而系统在将进程的访问和安全对象进行审核是,使用的是主访问令牌。具体的暂且未知。

这样基本上初步了解了一下,windows 的ACM了。

时间: 2024-10-25 07:42:48

[转载]ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)的相关文章

ACM(访问控制模型),Security Identifiers(SID),Security Descriptors(安全描述符),ACL(访问控制列表),Access Tokens(访问令牌)【转载】

对于<windows核心编程>中的只言片语无法驱散心中的疑惑.就让MSDN中的解释给我们一盏明灯吧.如果要很详细的介绍,还是到MSDN仔细的看吧,我只是大体用容易理解的语言描述一下. windows的安全访问控制(ACM,access control mode)是由两部分组成的.一个是访问令牌(access tokens),另一个是安全描述符(security identifiers). 访问令牌是欲进行访问的进程使用的表明自己身份和特权的信息数据. 安全描述符是欲被访问的安全对象的相关安全信

[转载]JNI学习积累之二 ---- 数据类型映射、域描述符说明

本文转载于:http://blog.csdn.net/qinjuning 在Java存在两种数据类型: 基本类型 和 引用类型 ,大家都懂的 . 在JNI的世界里也存在类似的数据类型,与Java比较起来,其范围更具严格性,如下: 1.primitive types ----基本数据类型,如:int. float .char等基本类型 2.reference types----引用类型,如:类.实例.数组. 特别需要注意:数组 ------ 不管是对象数组还是基本类型数组,都作为reference

VBS脚本获取安全标识符SID(Security Identifiers)的方法

一.SID简介       SID也就是安全标识符(Security Identifiers),是标识用户.组和计算机帐户的唯一的号码.在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID.Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名.如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,原因是该帐户 具有不同的 SID 号.安全标识符也被称为安全 ID 或 SID.    一个完整的SID

[2011山东省第二届ACM大学生程序设计竞赛]——Identifiers

Identifiers Time Limit: 1000MS Memory limit: 65536K 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2163 题目描写叙述 Identifier is an important concept in the C programming language. Identifiers provide names for several language

[转载] 高性能IO模型浅析

转载自http://www.cnblogs.com/fanzhidongyzby/p/4098546.html 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK.注意这里所说的NIO并非Java的NIO(New IO)库. (3)IO多路复用(IO Multiplexing)

Android平台下基于情境的访问控制模型——CBAC

Context-basedAccess Control Systems for Mobile Devices, IEEE Transactions on Dependable andSecure Computing, 2015年3月 [1] http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6807727 1.1. 背景 普渡大学的研究人员针对BYOD场景中Android终端内恶意软件泄露用户敏感数据的问题,提出了一种基于情境的访问控制模型

[转帖]linux文件描述符文件/etc/security/limits.conf

linux文件描述符文件/etc/security/limits.conf https://blog.csdn.net/fanren224/article/details/79971359 需要多学习了解一下. 文件描述符是什么?和文件句柄有啥区别? 文件描述符是linux/unix操作系统中特有的概念.相当于windows系统中的文件句柄.一个意思不同叫法. Linux系统中, 每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识这个文件.标准C中每个进程默认打开的有三个文

Kong Gateway - 11 基于网关服务的ACL访问控制列表 黑名单

同一服务名称 book 不允许即创建白名单访问控制列表又创建黑名单访问控制列表 启用服务的白名单&黑名单配置文件时,它们俩是不允许同时定义的,我们应该树立这样一种认知 不在黑名单中 即使没定义白名单,我们也把黑名单之外的所有用户归类为白名单用户 故ACL必须分两篇来发布,本范例中使用了 Kong Gateway - 01 基于网关服务的基本验证(Basic Authentication)9种验证方式当中的1种方式而已,我们当然可以用剩余的8种验证方式之一来取代basic-auth,强调一点的是A

运维ACL访问控制简单配置

问题 沿用练习三,编写并应用ACL策略,实现以下要求: 允许网段192.168.4.0/24在周一到周五的09:30至18:00通过代理访问外网 IP地址是192.168.4.205的主机在任何时间都不可以通过代理访问外网 4.2 方案 通过acl指令定义ACL访问控制权限. 通过http_access应用ACL访问控制列表. http_access策略及规则顺序: http_access根据访问控制列表允许或禁止某一类用户访问代理服务器: http_access规则按照它们的排列顺序进行匹配检