安全性

全新的 Elevation PowerToys for Windows Vista

Michael Murgolo

 

簡介:

  • 協力廠商指令碼工具的「以系統管理員身分執行」功能
  • 以其他使用者身分執行
  • 從此處以系統身份開啟 CMD 和 Windows PowerShell 提示
  • 拖放式提高權限小工具

下載本文程式碼: Elevation2008_06.exe (197KB)

歡迎閱讀另一期的 Elevation PowerToys for Windows Vista。我在 2007 年 6 月份的《TechNet Magazine》曾深入探討這個主題。一年後,我們再次聚首。這次,我想要說明如何將「以系統管理員身分執行」功能擴展到

我最愛的一些協力廠商指令碼工具,示範要如何取代 Windows Vista® 中已移除的一項不錯的 Windows ® XP 功能,並討論 Elevation PowerToy 內含的一些實用工具。

其他指令碼工具的「以系統管理員身分執行」功能

我在前一篇文章中討論的一個主題 (請參閱 technet.microsoft.com/magazine/cc162321.aspx) 是啟用原生 Windows 指令碼工具的 [以系統管理員身分執行] 選項。針對本文,我為一些協力廠商指令碼工具建立了「以系統管理員身分執行」PowerToy:

上述各項的程式碼都包含在本文所附的下載中,您可以在 technetmagazine.com 上找到。實際的檔案名稱分別是 ElevateAutoIt3.inf、ElevateAutoHotKey.inf、ElevatePerlScript.inf 和 ElevateKiXtart.inf。AutoIt v3、AutoHotkey 和 ActivePerl 的設定作業都非常簡單。只要下載相對應的應用程式,然後將它安裝在預設位置就行了。安裝好您感興趣的應用程式之後,您接下來只須為各項工具安裝適當的「以系統管理員身分執行」PowerToy。

可惜,KiXtart 2010 並沒有提供安裝程式。因此,為了確保 KiXtart 安裝在標準的位置,以便讓 PowerToy 正常運作,我提供了一個 INF 檔案,它會把 installKiXtart 2010 (v 4.60) 安裝到 Program Files\KiXtart,並註冊 .kix 副檔名。

請前往 www.kixtart.org/?p=downloads 下載 KiX2010_460.zip,然後把它解壓縮到資料夾。將 Install_KiXtart.inf 檔案 (內含在本文附隨的程式碼下載中) 複製到相同的資料夾。然後在 Install_KiXtart.inf 上按一下滑鼠右鍵,再選取 [安裝]。之後,您只要安裝 ElevateKiXtart.inf PowerToy 就行了。

「以其他使用者身份執行」PowerToy

使用者存取控制 (UAC) 的建立是為了讓使用者,甚至是那些系統管理員,以標準的使用者權限執行大多數的應用程式,藉此讓作業系統不易受到惡意程式碼的侵害。UAC 提供了提高權限可能性以進行系統管理工作和其他應用程式功能。這項提高權限可能性是透過 [以系統管理員身分執行] 選項提供,用滑鼠右鍵按一下可執行檔就會出現這個選項。我在 2007 年 6 月份期刊中討論的 Elevation PowerToy 擴充了這項功能,以利在其他檔案和物件類型上運作。

Windows Vista 內建的功能與許多系統管理工作都能密切的搭配運作。然而,Windows Vista 遺漏了一個重要的案例。那就是許多 IT 部門都設有原則,規定網路系統管理員使用一個使用者帳戶進行日常工作 (使用電子郵件、建立文件之類的作業),然後使用另外一個帳戶專門進行網路系統管理 (或是本機電腦系統管理)。

這麼做是為了協助降低風險,以免網路系統管理員在進行日常工作時不小心執行惡意程式碼而危及整個系統 — 或是他所在的網域。這在 Windows XP 上是使用按滑鼠右鍵的 [...身分執行] 選項完成的。但這個選項在 Windows Vista 中已經移掉,因為它已由 [以系統管理員身分執行] 選項所取代。

不過,runas 命令列工具仍存在 Windows Vista 中。不幸的是,您不能使用它來進行大多數常見的雙重帳戶工作 — 執行 Microsoft® Management Console (MMC) 嵌入式管理單元。譬如說,假設您已在 Active Directory® 中委派一些帳戶管理工作。您是以標準使用者的身分執行日常工作,而且您的網路系統管理員帳戶在啟用 UAC 的 Windows Vista 電腦上,同樣是本機 Administrators 群組的成員 (以便在必要時能夠安裝網路管理工具)。現在您想要以 Active Directory 系統管理帳戶啟動 Active Directory 使用者和電腦 (ADU&C),所以您試著使用 runas 命令,如下所示:

runas /user:mydomain\admin
"mmc.exe %windir%\system32\dsa.msc"

不幸的是,ADU&C 並不會因此而啟動。您反而會收到一個 runas 錯誤,指出「要求的作業需要提高的權限」。發生這種情況的原因是,MMC 可執行檔被標示為要以 highestAvailable 特殊權限等級執行。既然網路系統管理員帳戶的 highestAvailable 層級是系統管理員,那麼透過這種方式啟動 ADU&C 想必就需要提高權限。而 runas 並不會提示要求提高權限,錯誤於焉產生。

Windows Vista 使得這種案例處理起來更為棘手,因為它並不為 [...身分執行] 提供快顯功能表項目,而且也不提供任何內建方式讓您以需要提高權限的其他使用者身份執行處理程序。

如果沒有辦法解決這種困境,那麼本文讀起來一定很沮喪,碰巧,我有一個原始的 Elevation PowerToy 提供了解決第二個問題的門路,而我迅速地找出另一個 PowerToy 來解決第一個問題 (我倒是希望自己能夠聲稱是我想出了解決提高權限問題的辦法,但這是由 Windows AppCompat 小組的 Gov Maharaj 想到的)。

結果是「提升命令權限」PowerToy 可與 runas 命令搭配使用。之前的命令無法提供提高權限提示,而下面的程式碼可產生提示:

runas /user:mydomain\admin
"elevate mmc.exe%windir%\system32\dsa.msc"

這會使 runas 將 elevate.cmd 啟動為其他使用者 (技術上來說,被啟動的處理程序是 cmd.exe),而 elevate 命令會負責啟動 mmc.exe,並提供提高權限提示。

最後,我把這項竅門與 .exe 和 .msc 檔案的檔案關聯相結合,並給它一個 HTML 應用程式 UI 來建立 PowerToy,這個 PowerToy 會建立一個可透過按右鍵功能表取得的 [以其他使用者身分執行] 選項。選取 [以其他使用者身分執行] 時,會出現一個像 [圖 1] 所示的 HTML 應用程式。

[圖 1] 以其他使用者身分執行工具

[圖 1]** 以其他使用者身分執行工具 **(按一下影像可放大檢視)

在此處,直接輸入使用者名稱和網域 — 對於本機電腦上的帳戶,請勾選 [使用本機帳戶] 核取方塊。您接下來可以按一下 [執行] 按鈕以標準使用者身分啟動應用程式,或者您可以按一下 [以系統管理員身分執行] 按鈕以提高的權限來啟動應用程式。按下其中一個按鈕之後,runas.exe 便會執行並提示輸入密碼或智慧卡 PIN。

由於這個 PowerToy 使用的是「提升命令權限」PowerToy,因此您必須先安裝該 PowerToy。接下來在 RunAs.inf 檔案上按一下滑鼠右鍵,選取 [安裝],然後許可提高權限。若要解除安裝該工具,使用 [程式和功能] 控制台即可。

您會發現 [系統管理工具] 中有些 .msc 檔案的捷徑 (例如 [電腦管理]) 可與這個 PowerToy 搭配使用。但要注意的是,假如您使用 adminpack.msi 來安裝 Windows Server® 2003 系統管理工具的話,建立的捷徑並不會是 .msc 檔案的標準捷徑,而是 Windows Installer 捷徑,也就是說 Windows 檔案總管不會為這些捷徑顯示 [以其他使用者身分執行] 選項。

對於這些捷徑,您必須找出實際的 .msc 檔案,然後在它們上面按右鍵,或是建立 .msc 檔案的新捷徑。此外,因為 Windows Vista 中針對保護模式而重新設計 Internet Explorer® 的關係,runas 無法與 Internet Explorer 搭配運作 (您可以在 support.microsoft.com/?id=922980 找到與此議題相關的其他資訊)。

備註:在我完成這些 PowerToy 和出版這篇文章期間,Windows Sysinternals 也發行了一項新工具,功能與我的「以其他使用者身份執行」PowerToy 相比擬。它叫做 ShellRunas,可在 Windows Sysinternals 網站上找到:technet.microsoft.com/sysinternals/cc300361

既然 Sysinternals 的同仁實際上是以寫程式碼維生,您可能比較偏好使用他們的工具。我決定把我的工具留在本文中,示範如何使用 HTML 應用程式搭配指令碼,來完成這項特定的工作和一般的殼層延伸。

從此處以系統身分開啟 CMD 和 PowerShell 提示

有時候在本機系統內容中執行程式是免不了的。比方說,許多軟體散佈工具,像是 System Center Configuration Manager (SCCM),都是使用用戶端代理程式以本機系統身分執行來完成它的工作。

為了在嘗試散佈像是 SCCM 的產品之前先測試以本機系統身分執行的軟體安裝程式行為,使用以本機系統身分執行的命令提示來啟動安裝程式可能蠻有用的。因此,我決定建立「從此處以系統身分開啟 CMD 和 PowerShell 提示」PowerToy。

使用 Windows XP 時,我都是藉著命令殼層指令碼來完成這類的差事:

@echo off
sc create CmdAsSystem type= own type= interact
binPath= "cmd /c start cmd /k (cd c:\ ^& color ec ^& 
title ***** SYSTEM *****)"
net start CmdAsSystem
sc delete CmdAsSystem

然而,如果您嘗試在 Windows Vista 從提高權限的命令提示執行這個動作的話,會收到下列的錯誤訊息,而且也不會顯示以系統身分執行的命令提示:

<Code>警告:此 CmdAsSystem 服務是設定為互動式,其支援正被淘汰。此服務也許無法正常運作。</Code>

[圖 4]** 拖放式提高權限小工具 **

假如您已安裝了我之前的 Elevation PowerToy,那麼這個小工具將適用於 Windows Script Host 指令碼、Windows PowerShell 指令碼、HTML 應用程式,以及 Windows Installer 套件與修補程式 (還有 Windows Vista 中預設有定義 runas 動作的可執行檔與命令殼層指令碼)。您一次還可以拖曳一個以上的項目 (不妨試試拖曳資料夾到小工具,然後看看有什麼結果)。

若要安裝小工具,按兩下 Elevation.gadget (可在程式碼下載中取得)。如果您想要查看小工具的程式碼,只要在檔名加上 .cab 副檔名就行了。您接著可以從 Cab 檔案擷取內容。

總結

在本文的下載中,同時包含了全新的 PowerToy 和原文的 PowerToy。我對幾個舊的 PowerToy 做了一些微幅的變更。例如,原始版的「從此處以系統管理員身分開啟 Windows PowerShell 提示」和 Elevate WSH Script 兩者都會安裝自己的 elevate.cmd 和 elevate.vbs 複本。由於有幾個新的 PowerToy 也仰賴這些檔案,因此我將這些工具變更為要求安裝「提升命令權限」PowerToy (然後由它們共用該複本)。若要確定 PowerToy 是否要求安裝「提升命令權限」PowerToy,請檢查 INF 檔案的標頭:

其他某些原始的 PowerToy 也有非功能性的微幅變動。在安裝最新的 PowerToy 之前,請一律先解除安裝舊版的 PowerToy。由於這項集合現在已擴展成 17 項工具,我也包含了命令殼層指令碼,讓您安裝和解除安裝整個集合 (分別是 InstallAllPowerToys.cmd 和 UninstallAllPowerToys.cmd)。您可以進行自訂,只安裝和解除安裝您需要使用的工具。

您應該牢記在心,在預設的情況下,InstallAllPowerToys.cmd 並不會為協力廠商指令碼工具安裝「以系統管理員身分執行」PowerToy。您可以修改這個指令碼,只安裝您已安裝軟體的那些 PowerToy。當執行其中一個 PowerToy 時,它本身就會以提高權限重新啟動。UninstallAllPowerToys.cmd 應該也會移除所有這些舊版的工具。

就像我所有的 PowerToy 一樣,這些都是「無支援責任」工具,使用後果請自行承擔。它們並非 Microsoft 官方產品 — 而是我個人的創作。這些只經過我自己和其他志願者在預設語言為美國英文的 32 位元 Windows Vista 上的測試。最後,任何或所有這些 PowerToy 都有可能無法與 Windows 未來的更新、Service Pack 或作業系統版本搭配運作。

Michael Murgolo 是微軟諮詢服務 (Microsoft Consulting Services) 的資深基礎結構顧問。他專精的領域包括作業系統、部署、網路服務、Active Directory、系統管理、自動化及修補程式管理,同時也是桌面部署及移轉領域方面的主題專家。

© 2008 Microsoft Corporation 和 CMP Media, LLC.保留所有權利;未經允許,嚴禁部分或全部複製.