遠程執行命令避免UAC提示
Workaround: Run commands remotely bypassing UAC prompt
前言
使用WindowsVista/7的用戶都有這樣的經歷,每當你安裝程序,或者變更被系統保護的資源——很多時候你也不知道到底哪些東西是被系統保護的,甚至一個沒有有效簽名的程序運行的時候,即便你是管理員用戶登陸, Windows默認地都會暫時阻止該程序運行,并彈出一個提示框提示用戶是否繼續,直到用戶人為確定后,才會繼續運行該程序,這就是User Access Control(也就是UAC)的作用。
UAC的初衷是給系統安全帶來了一層人為保障,通過引入電腦操作人員的人為參與,來提供“有效”的系統安全保護。UAC這個設計的原意是“好”的,而且的確提供了系統內置的保護措施,所以除非需要不要關閉它。但是過多的用戶提示,確實也影響了用戶的使用體驗。在不關閉UAC的前提下,對于系統管理員,尤其是遠程管理多臺電腦時,帶來了一定的不便。在不增加管理費用、購置昂貴管理軟件的前提下,如何繞過UAC的提示,順利完成批量管理任務,是一個挑戰。
Runas為什么不適合?有人不禁會想到ruanas命令,雖然runas命令可以讓管理員提升一個程序的運行權限并繞過UAC的提示窗口,但是不適合遠程批量的執行,因為它依然要求在Command Prompt中輸入管理員密碼,而不能像類Unix系統的類似命令那樣靈活,這意味著什么?當使用命令完成同一任務部署到多臺電腦的時候,管理員需要登陸到每臺機器手動操作,這樣既低效又易出錯。
雖說在大型網絡管理環境中,可以使用諸如SCCM等的昂貴的管理軟件進行軟件管理或者通過Group Policy等方式對電腦和用戶管理,不過一個免費便捷的并適合小任務部署的操作,提供給管理員以靈活和快捷的途徑。我們這里實現一種免費而且完全使用Windows內置功能無需多余軟件安裝的方案,這樣可以方便管理員遠程部署任務。
目的和條件
我們的目的就是,在遠程電腦上順暢運行一個通常被 UAC 攔截的程序或命令文件。比如:執行命令 md %WinDir%\tmp ,這在普通的 Command Prompt 中會顯示 Access is denied 。只有運行 runas 或者使用 Run as administrator 打開 Command Prompt 才能順利完成,因為 %WinDir% 是被 UAC 保護的。如果使用諸如 psexec 來控制遠程電腦執行上面的命令,也會執行失敗。
這個方法的基本要求是:
- 管理員賬戶:至少具有遠程電腦 管理 員權限的用戶和密碼,可以是 AD 上的 Workstation 的管理員組成員,或者是 Workstation 本地的管理員賬號。
- DOS 命令:還有就是熟悉基本的 DOS 命令,因為后面會看到,我們的確需要命令行的操作,這樣才能最大化的實現自動完成管理任務。
操作過程:
在一臺測試機上,實現下面的各個步驟操作,
命令文件:
為了方便演示,我們使用下面的命令文件作為例子。使用任何文本編輯器,輸入下面的命令,并保為C:\ProgramData\WinVer.cmd--C:\ProgramData文件夾相當于XP中的All Users:
systeminfo| find "OS Name" | find "Windows 7" if %ERRORLEVEL% NEQ 0 goto Other echo Windows 7 > C:\Windows\WinVer.txt goto END :Other Echo Other Windows > C:\Windows\WinVer.txt :END該批命令在C:\Windows中生成一個WinVer.txt文件。
嘗試運行它,由于UAC保護下,該文件無法生成。
在實際操作中,可以是一個程序等,也可以有命令行參數。
創建一個Task模板 :
在Start菜單中輸入Task,并選擇運行Task Scheduler,或者在Control Panel的Administritive Tools中運行Task Scheduler程序。
在Actions中選擇CreateTask…,在General標簽中,在Name處填上一個名字,確定選擇”Runwith highest privileges”和"Run whether user is logged on or not",見下圖:
在Actions標簽中,創建一個新的Action,選擇Action為Start a Program,在Program/Script中選擇上面我們創建的命令文件C:\ProgramData\WinVer.cmd。見下圖:
點擊OK按鈕后確認保存。
因為新創建的Task不會被立刻顯示,所以需要重新運行Task Scheduler程序,找到剛才創建的新Task,在Actions里面選擇Export…,把這個Task保存為一個.xml文件,這個就是Task模板。下面使用test.xml文件名為例。
注意,一個在根下面的Task可能不能被有效運行,所以需要把它移動到一個目錄中,比如可以移動到Microsoft下面。
測試Task模板
為了保證這個Task可以正常運行,我們需要先來測試有一下。運行下面的命令:
schtasks.exe /run /tn "\Microsoft\Test"
如果運行成功后,在C:\Windows\文件夾中應該有一個WinVer.txt文件。測試成功后就可以進行下一步了。
遠程創建Task
前面的準備工作最羅嗦,從這里開始使用命令行最多。
上面,我們在本地機創建了一個Task,為了可以遠程控制,我們需要把這個模板在遠程機上創建一個相同的Task。很簡單使用下面的命令:
schtasks.exe /create /S COMPUTER /U ADMINISTRATOR /P ADMIN_PASSWORD /RU R_ADMINISTRATOR /RP R_ ADMIN_PASSWORD /TN ”\Microsoft\Test“ /XML %USERPROFILE%\Desktop\Test.xml /F把其中的:
COMPUTER 換成遠程電腦的名稱
ADMINISTRATOR 和 ADMIN_PASSWORD 換成本地電腦管理員的用戶名和密碼
R_ADMINISTRATOR 和 R_ADMIN_PASSWORD 換成遠程電腦管理員的用戶名和密碼
遠程運行該Task
遠程運行該Task使用下面的命令:
schtasks.exe/run /S COMPUTER /RU R_ADMINISTRATOR /RP R_ ADMIN_PASSWORD /tn "\Microsoft\Test"各參數說明見上創建Task。
遠程刪除該Task:
schtasks.exe/delete /S COMPUTER /RU R_ADMINISTRATOR /RP R_ ADMIN_PASSWORD /tn "\Microsoft\Test" /F各參數說明見上創建Task。
結束語:
有關schtasks的命令行參數詳細解釋參見有關說明。
我們這里只不過使用了Windows的Task服務的一個內置功能, 其實,一個具有相當權限的客戶化的系統服務,同樣是繞過UAC的一個思路 。
在危害Windows系統的病毒蠕蟲木馬等等多不勝堵的今天,殺毒防毒軟件成了日常可以安全運行Windows系統不可或缺的一個部分,微軟也出了自己的一個軟件對付病毒,安全問題已經成為Windows繼續發展的第一障礙。微軟應該對此相當重視,不過有趣的是,Microsoft的技術人員發現,這不是他們技術人員可以控制的,他們的系統是無懈可擊的,而是最終用戶的責任和義務,最終用戶應該具有慧眼識珠地辨別什么是對系統有危害的,什么是安全的操作,并可以清醒地理智地作出相應的反應,否則作為最終用戶就負有對自己不負責任的行為負擔相應后果的責任。于是,UAC閃亮登場了,用戶被強行改變自己的操作行為參與到這個安全防護游戲中。
Windows系統的這種越來越依賴于用戶GUI干預的安全設計思路,已經背離了電腦網絡系統高效快捷安全的初衷。它在處理用戶/程序/服務/設備等等系統相關權限的時候混亂的思路,不僅給用戶帶來了操作不便,也讓自己走上了背離用戶體驗的道路。這與Apple注重用戶體驗的設計思路,完全不同。在如今Apple方式獲得更多用戶和市場認同的形勢中,Microsoft是否也應該反思一下,提高用戶體驗度。
Tony Liu
June 20, 2012
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
