王朝百科
分享
 
 
 

access token

王朝百科·作者佚名  2010-10-19  
宽屏版  字体: |||超大  

access token 访问令牌的概念Windows操作系统安全性的一个概念。一个访问令牌包含了此登陆会话的安全信息。当用

access token
用户权利指派

户登陆时,系统创建一个访问令牌,然后以该用户身份运行的的所以进程都拥有该令牌的一个拷贝。该令牌唯一表示该用户、用户的组和用户的特权。系统使用令牌控制用户可以访问哪些安全对象,并控制用户执行相关系统操作的能力。有两种令牌:主令牌和模拟的令牌。主令牌是与进程相关的;模拟的令牌是与模拟令牌的线程相关的。

进程拥有某种令牌就表示它拥有某种特权。什么是特权呢?特权是指用户进程进行各种系统操作的权利。如:关机,加载设备驱动程序,改变系统时间也是一种特权。可以对用户或用户所在的组授予特权。见图。WinNT定义的特权在WinNT.h头文件中定义了这些特权的名称:

#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")

#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")

#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")

#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")

#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")

#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")

#define SE_TCB_NAME TEXT("SeTcbPrivilege")

#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")

#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")

#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")

#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")

#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")

#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")

#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")

#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")

#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")

#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")

#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")

#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")

#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")

#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")

#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")

#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")

#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")

#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")

#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")

#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")

#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")

#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")

#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")

#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")

#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")

#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")

#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")

#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")

如何取得一个进程的访问令牌通过API函数OpenProcessToken 取得进程令牌。其定义如下:

BOOL WINAPIOpenProcessToken(

__in HANDLEProcessHandle, //进程句柄。通过GetCurrentProcess函数取得当前进程句柄

__in DWORDDesiredAccess, //要对令牌进行何种操作。如TOKEN_ADJUST_PRIVILEGES用于调整权限

__out PHANDLETokenHandle//进程令牌句柄

);

如下代码取得进程的令牌,并告诉系统我们想调整令牌的权限

HANDLE hToken;

if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,

&hToken)) {

......

}对令牌可以进行的操作Value

Meaning

TOKEN_ADJUST_DEFAULT

改变令牌所有者、主组或访问控制列表DACL

TOKEN_ADJUST_GROUPS

改变令牌的组属性

TOKEN_ADJUST_PRIVILEGES

enable or disable 令牌的特权

TOKEN_ADJUST_SESSIONID

调整令牌的Session ID。进程需要 SE_TCB_NAME 特权.

TOKEN_ASSIGN_PRIMARY

为进程分配主令牌。需要 SE_ASSIGNPRIMARYTOKEN_NAME 特权

TOKEN_DUPLICATE

复制令牌

TOKEN_EXECUTE

合并 STANDARD_RIGHTS_EXECUTE 和 TOKEN_IMPERSONATE.

TOKEN_IMPERSONATE

附加一个模拟令牌到进程

TOKEN_QUERY

查询令牌

TOKEN_QUERY_SOURCE

查询令牌源

TOKEN_READ

合并 STANDARD_RIGHTS_READ 和TOKEN_QUERY.

TOKEN_WRITE

合并 STANDARD_RIGHTS_WRITE, TOKEN_ADJUST_PRIVILEGES, TOKEN_ADJUST_GROUPS, 和 TOKEN_ADJUST_DEFAULT.

TOKEN_ALL_ACCESS

合并所以可能的操作

与访问令牌关联的特权TOKEN_PRIVILEGES令牌特权结构体,该结构体定义了访问令牌所拥有的一系列特权。其原型定义如下:

typedef struct_TOKEN_PRIVILEGES{

DWORDPrivilegeCount; //特权数量(数组的长度)

LUID_AND_ATTRIBUTESPrivileges[ANYSIZE_ARRAY]; //特权数组

}TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

其中,Privileges数组类型为LUID_AND_ATTRIBUTES结构体,其原型定义如下:

typedef struct _LUID_AND_ATTRIBUTES {

LUID Luid; //局部唯一标识符,代表某种特权的Value

DWORD Attributes; //Luid的属性,代表特权的属性(Enabled or Disabled)

}LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;

其特权属性Attributes可以是如下常量:

含义

SE_PRIVILEGE_ENABLED

使特权有效

SE_PRIVILEGE_ENABLED_BY_DEFAULT

使特权默认有效

SE_PRIVILEGE_REMOVED

移除该特权

SE_PRIVILEGE_USED_FOR_ACCESS

取得对象或服务的访问权

如何调整访问令牌的特权取得特权的LUID值首先通过LookupPrivilegeValue函数取得某种特权的LUID,通过特权的名称查找特权的LUID。

BOOL WINAPILookupPrivilegeValue(

__in_opt LPCTSTR lpSystemName, //特权所在的系统名称,NULL表示本地系统

__in LPCTSTR lpName, //特权名称,在WInNT.h 中定义的特权名称

__out PLUID lpLuid //取得的特权的LUID

);

如下代码取得SE_DEBUG_NAME特权的LUID,并将特权属性设为SE_PRIVILEGE_ENABLED

TOKEN_PRIVILEGES tp;

tp.PrivilegeCount = 1;

LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);

tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;调整令牌特权AdjustTokenPrivileges函数可以调整令牌的特权。函数定义如下:

BOOL WINAPI AdjustTokenPrivileges(

__in HANDLE TokenHandle, //令牌句柄

__in BOOL DisableAllPrivileges, //是否禁用所有特权,如为TRUE,则忽略NewState参数

__in_opt PTOKEN_PRIVILEGES NewState,//调整为NewState结构定义的特权

__in DWORD BufferLength, //PreviousState参数的字节大小

__out_opt PTOKEN_PRIVILEGES PreviousState, 可选,调整之前的TOKEN_PRIVILEGES结构体指针

__out_opt PDWORD ReturnLength //可选,返回的结构体的长度

);

//调用

AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);

主令牌和模拟的令牌主令牌是有windows内核创建并分配给进程的默认访问令牌。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有