Windows UAC——用戶賬戶控制

一、概述

Windows UAC,即用戶賬戶控制,是Windows Vista及以上版本引入的一種安全特性。它的主要目的是在用戶與系統管理員之間建立一個防火牆,防止管理員不經意間的惡意或者誤操作造成的災難性後果。該技術與Unix/Linux的權限管理類似,可以限制應用程序如何影響系統,並提示用戶在危險操作之前進行確認。在Windows系統中,UAC是一個與系統權限有關的難點,它不僅僅與前端的UI彈出框有關,還有與權限級別相關的API調用以及訪問受限制的資源。

二、UAC的工作原理

Windows UAC的工作原理是利用互相矛盾的權限來實現,通常來說管理員會運行某些需要高權限才能運行的應用,而用戶則需要一個類似管理員一樣的權限才能夠運行這些應用。UAC就是通過彈出請求確認的UI框和權限操作掩碼等實現的。具體來說,當運行一個需要高權限的應用時,Windows就會彈出一個確認操作的UI界面,如果用戶同意,那麼此次操作將會獲得管理員權限,否則只能以舊有用戶權限運行,這種方式可以使管理員和用戶擁有不同的權限等級,從而降低系統被攻擊的風險。

三、UAC實現過程

UAC的實現過程可以分為以下幾個步驟:

1、確定當前用戶是否有管理員權限

2、如果沒有管理員權限,提升權限等級

3、通過API獲取權限掩碼

4、訪問資源並執行操作

以下是一個簡單的代碼示例:

BOOL IsUserAdmin()
{
    BOOL fReturn = FALSE;
    DWORD dwStatus;
    DWORD dwAccessMask;
    DWORD dwAccessDesired;
    DWORD dwACLSize;
    DWORD dwStructureSize = sizeof(PRIVILEGE_SET);
    PACL pACL = NULL;
    PSID pSIDAdmin = NULL;

    HANDLE hToken = NULL;
    PRIVILEGE_SET ps;
    GENERIC_MAPPING GenericMapping;
    SECURITY_DESCRIPTOR sd;
    SECURITY_DESCRIPTOR sdAdmin;
    SECURITY_QUALITY_OF_SERVICE sqos;
    ULONG lInfoLength;

    GenericMapping.GenericRead = GENERIC_READ;
    GenericMapping.GenericWrite = GENERIC_WRITE;
    GenericMapping.GenericExecute = GENERIC_EXECUTE;
    GenericMapping.GenericAll = GENERIC_ALL;

    dwStatus = 
    AllocAndInitializeSid(
        &gSystemSidAuthority,
        2,
        SECURITY_BUILTIN_DOMAIN_RID,
        DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0,
        &pSIDAdmin);

    if (dwStatus == ERROR_SUCCESS) 
    {
        if (ImpersonateSelf(SecurityImpersonation) == TRUE) 
        { 
            if (OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &hToken) == FALSE) 
            {
                if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) == FALSE) 
                {
                    RevertToSelf();
                    goto Cleanup; 
                }
            }

            if (hToken != NULL)
            {
                if (AccessCheck(&sd, hToken, dwAccessDesired, &GenericMapping, &ps, &dwStructureSize, &dwStatus, &fReturn)) 
                {
                    if (fReturn) 
                    {
                        // ... User is an admin
                    }
                }

                CloseHandle(hToken);
            }

            RevertToSelf();
        }
    }

Cleanup:
    if (pSIDAdmin)
        FreeSid(pSIDAdmin);
    if (pACL)
        LocalFree(pACL);

    return(fReturn);
}

四、UAC的優缺點及適用範圍

優點:

1、Windows系統管理員和普通用戶權限能夠分別獨立管理,降低了管理員被攻擊的風險;

2、提供了一個規則化的、標準化的管理策略,方便管理;

3、可以通過SDK對API調用進行限制,提高系統的穩定性。

缺點:

1、彈出過多的UI界面,降低了用戶體驗;

2、會對進程的CPU和內存資源造成額外開銷,降低系統性能;

3、在特殊情況下(如病毒篡改或者UAC彈窗偽造),會影響系統安全。

適用範圍:

用戶賬戶控制幾乎適用於任何需要對安全性進行控制的Windows應用程序,特別是那些需要系統管理員權限才能運行的程序。在家庭電腦上,用戶不一定需要用到UAC,但在商務辦公場景,使用UAC可以大大提高系統的安全性。

原創文章,作者:WEAO,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/136641.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WEAO的頭像WEAO
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

  • 如何在樹莓派上安裝Windows 7系統?

    隨着樹莓派的普及,許多用戶想在樹莓派上安裝Windows 7操作系統。 一、準備工作 在開始之前,需要準備以下材料: 1.樹莓派4B一台; 2.一張8GB以上的SD卡; 3.下載並…

    編程 2025-04-29
  • 如何配置Python環境變量在Windows 11

    在本文中,您將學習如何在Windows 11操作系統上配置Python環境變量的步驟。Python是一種高級編程語言,廣泛用於編寫Web應用程序、數據分析、人工智能和機器學習等。在…

    編程 2025-04-29
  • Python中接收用戶的輸入

    Python中接收用戶的輸入是一個常見的任務,可以通過多種方式來實現。本文將從以下幾個方面對Python中接收用戶的輸入做詳細闡述。 一、使用input函數接收用戶輸入 Pytho…

    編程 2025-04-29
  • Python彈框讓用戶輸入

    本文將從多個方面對Python彈框讓用戶輸入進行闡述,並給出相應的代碼示例。 一、Tkinter彈窗 Tkinter是Python自帶的圖形用戶界面(GUI)庫,通過它可以創建各種…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Python中獲取用戶輸入命令的方法解析

    本文將從多個角度,分別介紹Python中獲取用戶輸入命令的方法,希望能夠對初學者有所幫助。 一、使用input()函數獲取用戶輸入命令 input()是Python中用於獲取用戶輸…

    編程 2025-04-27
  • 如何在Windows系統下載和使用cygwin?

    如果你是一名Windows系統的開發者,你可能會遇到一個問題,那就是缺少Unix/Linux系統下常用的命令行工具,這時候,你可以使用cygwin來解決這個問題。 一、cygwin…

    編程 2025-04-27
  • 蘋果電腦安裝Windows教程

    下面將介紹如何在蘋果電腦上安裝Windows操作系統。 一、獲取Windows操作系統鏡像文件 首先,我們需要去Microsoft官網下載Windows操作系統的鏡像文件。 步驟:…

    編程 2025-04-27
  • Python接收用戶鍵盤輸入用法介紹

    本文將從多個方面對Python接收用戶鍵盤輸入進行詳細闡述,給出相關的代碼示例,讓大家更好的了解和應用Python的輸入功能。 一、輸入函數 在Python中,我們可以使用兩種函數…

    編程 2025-04-27
  • 如何在Linux中添加用戶並修改配置文件

    本文將從多個方面詳細介紹在Linux系統下如何添加新用戶並修改配置文件 一、添加新用戶 在Linux系統下創建新用戶非常簡單,只需使用adduser命令即可。使用以下命令添加新用戶…

    編程 2025-04-27

發表回復

登錄後才能評論