大家都知道,在windows vista及以后的操作系统,有管理员权限的用户登录成功后,会存在两个令牌,一个为权限完整的令牌,一个为权限被过滤的令牌。并且如果用sysinternal工具logonsessions查看的话,这两个令牌属于不同的Logon Session。以上情况是如何产生的呢?请听我胡乱讲解一番。
用户交互认证登录时,登录信息被送至lsass进程中的指定认证包进行身份认证,认证通过后,会为此次认证过程创建logon session及相关的安全信息(组、权限、ACL等),lsass拿到这些信息后,创建相关的令牌,此令牌为未过滤的。并且本地权威子系统会检查其所属地用户组及权限,若其属于某个特定组或拥有某些权限,则会为其创建过滤受限的令牌。
查看CreateToken函数参数,有一个参数为__in PLUID LogonId, 即指定与Token相关的Logon Session,所以一个Token与一个Logon Session相关联啦。
MSDN对Logon Session的定义为
A logon session is a computing session that begins when a user authentication is successful and ends when the user logs off of the system.
根据调试信息,lsass创建logon session由lsasrv!LsapCreateLsaLogonSession负责,而创建令牌lsasrv!LsapCreateV2Token负责。