The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

Windows 8 使用者帳戶控制 (UAC) 深入研究與專家密技分享

使用者帳戶控制 (UAC) 是個讓人又喜歡又討厭的東西,喜歡的是它真的讓惡意軟體不容易入侵你的電腦,討厭的是它真的很煩,隨時都有可能跳出一個提示你是否同意執行的畫面,也因此不少人剛安裝完 Windows Vista 或 Windows 7 都是第一時間將其關閉,而關閉的結果是電腦永遠執行在最高權限底下,當不小心執行到惡意程式時,電腦就有可能被植入木馬或病毒,非常危險!也因此 Windows 8 為了兼具安全方便,再次改良 使用者帳戶控制 (UAC) 的使用方式,這次是就算你設定關閉 使用者帳戶控制 (UAC) 但事實上並沒有關閉,是不是覺得很玄?接著看下去你可能就會明白。

使用者帳號控制 (UAC) 是 Windows Vista 和 Windows 7 作業系統中的一個安全性元件。

啟用 UAC 的時候,就算你登入身分為本機管理者 (Local Administrator),還是會以 一般使用者的權限 在執行,當你真正需要執行到 管理者權限 才能做的事情時(例如安裝軟體)電腦才會提示你,問你要不要授予這次提升權力 (Privilege escalation) 的要求。

提升權力 (Privilege escalation) 的要求基本上還分成三種可能的使用情境:

  1. 使用者在啟動應用程式前主動授予 管理者權限
  2. 應用程式在執行過程中主動要求提升權力,如果這時 UAC 有開啟,使用者必須主動同意授權
  3. 應用程式在執行過程直接存取到 管理者權限 才能存取的檔案,但沒有主動要求提升權力(如:讀寫機碼、存取系統檔案、設定防火牆規則、啟動/關閉 Windows 服務、對程序進行偵錯、…)

這三種使用情境我逐一說明如下:

1. 使用者在啟動應用程式前主動授予 管理者權限

主動以系統管理員身分執行特定應用程式的方法相信大家都知道,我也不用特別多說:

 

2. 應用程式在執行過程中主動要求提升權力,如果這時 UAC 有開啟,使用者必須主動同意授權

有些程式在執行時可以不用特別手動提升權力,例如你用【執行】對話框執行 regedit (登錄編輯程式)

不用特別手動提升權力,預設就會喚起 使用者帳戶控制 (UAC) 的同意畫面讓你設定:

 

3. 應用程式在執行過程直接存取到 管理者權限 才能存取的檔案,但沒有主動要求提升權力

其實在 Windows 裡大部分的應用程式都是屬於這種不會主動要求權力的程式,像是小算盤、記事本、Word、Excel、PowerPoint、Visual Studio 2010、Visual Studio 2012、… 等等。

當然,你知道的,像是病毒程式、木馬程式、…等等這類惡意軟體,如果一開起來就要求要你提升權力,還被 UAC 給抓到問你要不要同意,那不是太容易被抓包了嗎!所以大部分的惡意軟體,不太可能在執行程式一開始的時候就要求提升權力的。

這種沒有主動要求提升權力就執行的應用程式會有一個很大的能力限制,那就是這類程式在執行的過程中無法再提升權力了,這當然也進一步保護你的電腦安全,而這也是為什麼我們經常耳提面命的說 UAC 不要設定強制關閉的原因!

有啟用 UAC 的開發人員或 IT 人員可能會遇過一個問題,那就是你先開啟記事本,然後在記事本中開啟系統管理者才能存取的檔案進行編輯(例如 C:\WINDOWS\system32\drivers\etc\hosts 檔案),當你開開心心的編輯完成,最後在儲存檔案時卻發現【存取被拒】的窘境,如下圖示:

 

也因為 UAC 有這些讓大家感覺奇怪的限制存在 (其實是因為不了解而產生誤會),我相信有許多專業的 IT/Pro 人士也會選擇將 UAC 給關閉,因為這些限制對它們來說真的太囉嗦了!


在了解 使用者帳戶控制 (UAC) 的運作細節之後,接著我要來講 關閉使用者帳戶控制 時,Windows 7 與 Windows 8 之間有甚麼不一樣的地方,還有 Windows 8 如何減少使用者對 UAC 的抱怨,又能提高使用者操作電腦的安全性!

※Windows Vista / Windows 7 關閉使用者帳戶控制

要知道如何關閉使用者帳戶控制,網路上有一大堆文章,應該不用我介紹,我僅留連結給各位參考:

當設定關閉使用者帳戶控制之後,電腦會提示你必須重新開機才能生效。

重開機並登入後你會發現,不管你執行什麼應用程式,預設都以【系統管理員】也就是最高管理者權限 來執行,所有的應用程式都可以任意讀寫機碼、存取系統檔案、設定防火牆規則、啟動/關閉 Windows 服務、對程序進行偵錯、執行記憶體傾印、…,所有你知道的、不知道的他都有能力執行!

話說到此,不害怕的我也沒輒了!XD

 

※Windows 8 關閉使用者帳戶控制

在 Windows 8 裡,關閉使用者帳戶控制的方式與 Windows 7 一模一樣,過程也不用我贅述。

但是如果你在 Windows 8 設定過關閉使用者帳戶控制的話,你會發現設定關閉後竟然不會要求重新開機,連登出都不用耶,你是不是覺得 Windows 8 真的有在改進!我剛開始也覺得奇怪,難道 Windows 8 真的有變的這麼聰明嗎?我在仔細且反覆的測試之下驚人的發現,原來使用者帳戶控制沒有真的被關閉耶!即便我重開機之後,也是一樣的!

最簡單的一個測試方法就是透過【執行】對話框執行 cmd 指令:

如果在 Windows 7 作業系統下,這樣執行一定會看到如下圖【系統管理員】字樣:

但是在 Windows 8 作業系統下,這樣執行所看到的標題並沒有【系統管理員】字樣,也代表著目前命令提示字元正執行在【一般使用者權限】之下!

這時我們來測試從命令提示字元寫入一個檔案到系統保護的資料夾,你會發現有【存取被拒】的情況發生,也代表這個命令提示字元正受使用者帳戶控制的保護傘下運作,如下圖示:

此時我考各位一個問題:如果我直接在沒有最高權限的 命令提示字元 下執行 regedit (登錄編輯程式),你覺得會喚起 使用者帳戶控制 的同意畫面嗎?還是直接開啟成功呢?

答案是:不會喚起同意執行的畫面,而直接成功開啟 regedit (登錄編輯程式) !

你可能會想問:為什麼呢?目前命令提示字元不是執行在【一般使用者權限】之下嗎?他怎麼會有權利開啟 登錄編輯程式 呢?!

那是因為 登錄編輯程式 屬於文章稍早提到的 提升權力 的第二種情境,也就是【應用程式在執行過程中主動要求提升權力】,你從命令提示字元啟動另一個程式,由於你目前已經關閉 UAC 通知,所以 regedit 在跟系統要求更高權力的過程並沒有主動通知你,所以才能順利的直接開啟應用程式!


現在,各位應該很清楚 使用者帳戶控制 在 Windows 8 與 Windows 7 的差別了,在 Windows 8 作業系統下,就算你關閉了使用者帳戶的通知,大部分沒有要求主動提升權力的應用程式(如文章稍早提到的第三種情境)將依然沒有權利存取大部分重要的系統資源,也就是讀寫機碼、存取系統檔案、設定防火牆規則、啟動/關閉 Windows 服務、對程序進行偵錯、執行記憶體傾印、…等等。

這一點,我相信還是會有許多使用者或企業抱怨的,因為他們還是可能有許多早期開發完成的舊程式必須在最高管理者權限之下執行,而這些程式又不懂得主動要求提升權力,那可該怎麼辦呢?

如果你的應用程式要從 開始畫面 中啟動,可以在應用程式的動態磚上按下右鍵,並選擇 應用程式列 的【以系統管理員身分執行】按鈕即可以管理者權限開啟該應用程式。

如果你不想每次都這樣操作的話,也可以先將應用程式釘選在工作列上:

再去修改應用程式捷徑的內容:

切換到 捷徑 頁籤,並點選【進階】按鈕進入設定:

將【以系統管理員身分執行】勾選起來,按下確定後即可確保每次執行這個捷徑都能以最高權限執行。


好吧!我知道你是個頑強的使用者,不怕病毒與駭客入侵的強者,如果真的要讓 Windows 8 從骨子裡關閉 使用者帳戶控制 (UAC) 還是可以的,以下設定完成後,其作業系統的執行過程就會變得與 Windows 7 完全一樣!

確實關閉 UAC 的步驟如下:

1. 透過【以系統管理員身分執行】開啟 命令提示字元 (Win+X+A),並執行以下指令即可設定完成!

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f

如果不熟指令的話,也可以開啟 regedit (登錄編輯程式) 起來修改:

找到以下機碼名稱:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

然後將 EnableLUA 的值修��成 0 即可關閉使用者帳戶控制:

當你一修改機碼,工作列上會立即跳出提示,要求你重新啟動電腦才能真正關閉使用者帳戶控制!

請注意:當你真正關閉使用者帳戶控制之後,將會完全無法使用 Windows 8 的 Metro 介面,所有 Metro 介面下的 App 都將無法執行 (如下圖示),而且會有許多只能在 Metro 介面自訂的電腦設定都將無法使用,要強制關閉使用者帳戶控制之前,還請各位三思!

 


寫到這裡,各位可能覺得文章該結束了吧?!嘿嘿~ Visual Studio 程式開發人員請繼續看下去:

基本上,對 Visual Studio 開發人員來說,在 Windows 8 的 使用者帳戶控制 還開啟的情況下會遇到一個小問題!以往我們經常會有從 檔案總管 拖曳檔案到 Visual Studio 方案總管 裡的習慣,或是從 檔案總管 拖曳檔案到 Visual Studio 裡開啟專案或方案的習慣,當你在【系統管理員】模式下開啟 Visual Studio 開發工具時 (不管哪個版本),這時由於 檔案總管 (一般執行權限) 與 Visual Studio (系統管理員權限) 跑在不同的執行權限下,所以兩個程序不能夠互相溝通,也就是無法拖曳檔案了!

為此我也困擾了幾天時間,後來還真的給我想出絕妙的解決辦法,超黑的!方法如下:

  1. 透過【以系統管理員身分執行】開啟 命令提示字元 視窗
    按下快速鍵 Win + X 再按下 A 即可開啟
  2. 執行以下指令,將現有檔案總管程序全部強迫關閉
    taskkill /IM explorer.exe /F
  3. 再執行以下指令,將檔案總管重新啟動(此時會以以系統管理員身分啟動
    start explorer.exe

或者你可以先寫好一個批次檔,下次需要的時候直接用滑鼠雙擊批次檔即可快速讓檔案總管切換成以系統管理員身分執行。

請注意:執行批次檔的時候還是要特別點選【以系統管理員身分執行】才行喔!

檔案總管重新啟動之後,就可以從檔案總管拖曳檔案進 Visual Studio 開發工具了!

透過這個技巧,可以讓使用者在 完全不用登出 / 不用重開機 的情況下完成【關閉使用者帳戶控制】的任務,帥啊!^_^

 

最後,我再教各位如何將檔案總管的執行權限降為一般使用者權限,以下是設定步驟:

  1. 按下 Ctrl + Shift + ESC 快速鍵,開啟工作管理員
  2. 點擊【更多詳細資料】展開完整的工作管理員功能
  3. 找到 Windows 檔案總管 這個程序,然後將其結束工作
  4. 最後我們直接透過工作管理員執行新工作啟動 Windows 檔案總管

    最後請記得不要勾選以系統管理權限建立此工作】選項,按下確定後即可回復一般權限執行的檔案總管

如此一來,檔案總管就能回復原本一般使用者權限的執行模式,而且你原本切換到系統管理權限時無法使用 Metro 介面的 App,切換回來之後就能正常使用了,整個過程都是在 完全不用登出 / 不用重開機 的情況下完成【開啟使用者帳戶控制】的任務,實在帥啊! ^_^Y

 

總結

這篇文章寫了好幾天了,研究的過程中更進一步了解 使用者帳戶控制 (UAC) 的運作特性,相信對於 UAC 還有疑慮的 IT 人員有所幫助,也或許能改變你對 UAC 的看法。

Windows 8 這次的 使用者帳戶控制 (UAC) 改進我覺得非常棒,也就是就算你關閉使用者帳戶控制,也能預設讓應用程式跑在一般權限裡,光是為了這一點我就想把所有 Windows 7 升級到 Windows 8 了!

當然,這次 使用者帳戶控制 (UAC) 這部分的改進也許對 IT/Pro 的人來說是件好事,但對許多其他使用者來說,當你關閉了 使用者帳戶控制 (UAC) 之後卻還不能執行程式的某些功能時,可能真的會想發瘋砸電腦,此時請各位發揮愛心,把愛傳出去,讓使用者知道這個設計是為了它們好,不要再中毒了。 ^_^

 

相關連結