访问令牌(access token)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huhaoxuan2010/article/details/78404136

安全对象:就是资源,比如目录,文件,管道之类的。

访问令牌是用来描述进程或线程安全上下文的对象,令牌所包含的信息是与该user账户相关的进程或线程的身份和权限信息。当user登录时,系统通过将user输入的密码与储存在安全数据库中的密码进行对比。若密码正确,系统此时会为user生成一个访问令牌。之后,该user执行的每个进程都会拥有一个该访问令牌的拷贝。

当线程和一个安全对象交互时或者线程试图执行一个需要权限的系统任务时,系统使用访问令牌来辨别user。访问令牌包含以下信息:

1.用户账户的安全标识(SID)

2.用户所属组的SID

3.识别当前登录会话的登录SID

4.用户或者用户组所保存的权限列表

5.所有者SID

6.主组SID

7.默认的DACL。当用户在没有指定安全描述符情况下创建一个安全的对象时,系统使用该默认DACL。

8.访问令牌的来源

9.令牌是一个主令牌还是模拟令牌

10.限制的SID可选列表

11.当前模拟级别

12.其他统计

每个进程都有一个主令牌用于描述和进程相关联的用户账户的安全上下文。默认地,当进程的线程和安全对象交互时系统使用主令牌。此外,线程还能够模拟一个客户端账号。该模拟账号让线程和使用客户端的安全上下文的安全对象交互。一个模拟客户端的线程它不仅有主令牌还会有一个模拟令牌。

使用OpenProcessToken函数获取一个句柄,该句柄为进程的主令牌句柄。使用OpenThreadToken获取指向线程的模拟令牌句柄。

可使用下面的函数来操作访问令牌:

函数 描述
AdjustTokenGroups 在访问令牌中改变组信息
AdjustTokenPrivileges 在访问令牌中使能或禁止权限。它没有做新的授权或撤销已经存在的授权
CheckTokenMembership 在指定的访问令牌内判断一个指定的SID是否使能
CreateRestrictedToken 创建新的令牌,它是一个已经存在令牌的限制版本。该限制令牌可能已经禁止SID,删除权限以及一系列的限制SID
DuplicateToken 创建一个新的模拟令牌,该令牌是复制于一个已经存在的令牌
DuplicateTokenEx 创建一个新的主令牌或者模拟令牌,该令牌复制于一个已经存在的令牌
GetTokenInformation 获取一个令牌相关的信息
IsTokenRestricted 判断一个令牌是否含有一系列限制SID
OpenProcessToken 获取一个指向进程的主令牌的句柄
OpenThreadToken 获取一个指向线程的模拟令牌的句柄
SetThreadToken 给一个线程分配或删除一个模拟令牌
SetTokenInformation 改变令牌的属主,主组,或默认DACL

访问令牌函数使用以下结构体来描述访问令牌:

结构体 描述
TOKEN_CONTROL 描述访问令牌的信息
TOKEN_DEFAULT_DACL 默认的DACL,系统会在线程创建的新对象的安全描述符中使用该DACL。
TOKEN_GROUPS 指定访问令牌的SID和组SID的属性
TOKEN_OWNER 默认属主SID,指向新对象的安全描述符。
TOKEN_PRIMARY_GROUP 默认主组SID,指向新对象的安全描述符
TOKEN_PRIVILEGES 与访问令牌相关联的权限,也决定了权限是否使能
TOKEN_SOURCE 访问令牌来源
TOKEN_STATISTICS 和令牌相关的统计
TOKEN_USER 和访问令牌相关的用户SID

访问令牌函数使用以下枚举类型:

枚举类型 描述
TOKEN_INFORMATION_CLASS 表示来自访问令牌设置或获取的信息类型
TOKEN_TYPE 标识访问令牌为主令牌还是模拟令牌


参考网址


 


展开阅读全文

没有更多推荐了,返回首页