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

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