特權(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).