特权(privilege)是Windows操作系统的帐户权限,如用户、用户群、系统服务、计算机等执行不同的系统操作,如关机、装入设备驱动、改编系统时间等。[1]特权不同于访问权限(access right):

  • 特权控制访问系统资源或系统相关任务,访问特权控制访问可安全对象(securable object);
  • 系统管理员赋予特权给用户或用户群;而系统允许或拒绝对可安全对象的访问,这是基于对象的自主访问控制列表(DACL)中的访问控制项(ACE)。

系统有一个帐户数据库,存储了用户或用户群的特权。当用户登录后,系统产生一个访问令牌(access token)包含了用户的特权清单,这包含用户所在群的特权。注意特权仅限于本地计算机,域帐户在不同计算机上有不同特权。

当用户试图执行一个特权操作,系统检查用户的访问令牌以确定使用是否具有必要的特权。调用GetTokenInformation函数可以检查特权。

Windows API在Winnt.h定义了一套字符串常量,如SE_ASSIGNPRIMARYTOKEN_NAME,辨识不同的特权。见“Privilege Constants”。API函数使用LUID类型来标识不同的特权。LUID随不同的计算机启动任务而变化,因此要用LookupPrivilegeValue函数查出LUID与“Privilege Constants”的对应。使用LookupPrivilegeName函数把LUID转化为对应的字符串常量。

系统给特权一套用于显示的描述字符串。使用LookupPrivilegeDisplayName函数获取对应于字符串常量的特权的描述字符串。例如特权SE_SYSTEMTIME_NAME的描述字符串是"Change the system time"。

可以用PrivilegeCheck函数检查一个访问令牌是否具有指定的特权集。

系统管理员可以用Local Security Authority (LSA)系列函数管理特权。LsaAddAccountRights与LsaRemoveAccountRights函数增减特权。LsaEnumerateAccountRights函数枚举指定帐户的特权。LsaEnumerateAccountsWithUserRight函数枚举具有指定特权的帐户清单。

参考文献

编辑
  1. ^ MSDN:Privileges. [2017-12-19]. (原始内容存档于2014-10-21).